Code Probleme - Pong - Winkel COS,SIN, FOR TO
Übersicht

pinochinoBetreff: Code Probleme - Pong - Winkel COS,SIN, FOR TO |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Heyo Community
Ich Programmiere jetzt seit ca. 3 Tagen und habe gestern das Pong Tutorial von der "http://de.wikibooks.org/wiki/B....28Pong.29" studiert. Ich meine auch größtenteils alles verstanden zu haben, also rangesetzt und mit gelegentlichen "Sichergehen", Pong nachgebaut. Gesamter Code BlitzBasic: [AUSKLAPPEN] ; Mein Pong - Mal sehen was dabei wohl Rauskommt! Nun gibt es ein Paar abschnitte die mir völlige Rätsel sind und welche ich quasi nur durch direktes Abschreiben, in meinen Code Implementieren konnte ![]() BlitzBasic: [AUSKLAPPEN] ;das Berechnen der Kugelkoordinaten Das ist mir z.B. ein Absolutes Rätsel Befehle cos, sin, hab ich mir öfter angeschaut werd aber irgendwie nicht schlau draus. BlitzBasic: [AUSKLAPPEN] For i = 0 To 1 Diesen Teil verstehe ich Ansatzweise, allerdings kann ich trotz verschiedener tutorials und erläuterungen die zu finden waren "for" & "to" noch nicht richtig einsetzen. BlitzBasic: [AUSKLAPPEN] ;kollision wände Hier versteh ich das ganze dank "Winkel" nicht was wahrscheinlich wieder irgendwo auf cos/sin basiert. Also wenn jemand bereit ist mir mit diesen Problemen zu helfen wäre dass echt klasse. vllt versuchen die Problem-code-abschnitte Auseinanderzunehmen und zu Erläutern so das auch ich Dummie das ganze verstehe. ![]() ![]() mfg pinO |
||
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Cos und Sin Funktionen sind halt einfach mathematische Funktionen, die jeweils die X oder Y Koordinate im Einheitskreis beschreiben. Wenn du das nicht in Mathe hattest, das genau zu erklären würde die dauer meines Kaffees übersteigen, von daher, entweder Mathebuch anschauen oder falls du das wirklich noch nicht hattest hin nehmen, das man damit eine Bewegung erhält, die die Länge Speed hat, und die Distanz dem Winkel entsprechend auf X und Y verteilt. Man also gleich schnelle Bewegungen in beliebige Richtungen erhält.
Eine For to schleife ist eine Zählschleife. Die Variable, hier das i wird nacheinander vom Wert links vom to bis zum Wert rechts vom to gesetzt. Die Schritte sind dabei standart mäßig 1 groß können aber mit einem dahinter gehängten Step beliebig gesetzt werden. BlitzBasic: [AUSKLAPPEN] For i = 0 To 9 würde also 0 1 2 3 4 5 6 7 8 9 ausgeben. For ist immer gut wenn du weißt wie oft du etwas machen willst und nicht auf eine Bedingung wartest wie bei while oder repeat. Letzt endlich kannst du sie aber alle durcheinander ersetzten und es ist mehr für den komfort des Programmierers. Die letzten Zeilen, geben das Reflexionsverhalten wieder. Wie du vielleicht weißt hat ein Kreis 360 Grad. Die Sinus und Cosiunsfunktionen verwenden auch nur Winkel von 0 bis 360 Grad (wobei 360 auch gleichzeitig wieder 0 ist weil man dann ja einmal rum ist) wenn du nun + 180 Grad rechnest hast du also einen halben Kreis gemacht und schaust dann in die gegenüber liegende Richtung. Beim Abprallen ist es ja so das dein Winkel beim Eintritt, gleich dem Austritts Winkel ist, oder anders gesagt wenn du was gegen eine Wand wirfst fliegt es in die andere Richtung aber genau so steil wieder weg. Das wird mit dem 180 drehen erzeugt. Die If - Abfragen schauen hier denke ich mal ob die Kugel gerade den Rand erreicht hat. |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Kugel bewegt sich jeweils eine bestimmte Strecke (Speed) in eine bestimmte Richtung (Winkel).
Mit Sinus und Cosinus kannst Du einen solchen Richtungsverktor in eine X- und eine Y-Komponente zerlegen. Erst damit ist es Dir möglich aus Winkel und Speed die nächste Bildschirmposition der Kugel zu errechnen. |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hierzu noch einen weiteren Link:
Wikipedia Dort ist ein, wie ich finde, sehr brauchbares Animiertes Bild zu diesem Thema. Es steht neben der überschrift "Definition am Einheitskreis Auch ohen Ahnung von Sinus und Cosinus kann man sehr leicht erkennen, wie sich Sinus und Kosinus bei entsprechenden Winkeln verhalten. BlitzBasic: [AUSKLAPPEN] ;das Berechnen der Kugelkoordinaten Speed kannst du dir wie einen Faktor vorstellen. Cos(Winkel) gibt einen wert zurück, welcher zwischen -1.0 und 1.0 liegt. Dieser wird mit Speed multipliziert und gibt so eine gewisse verschiebung zurück, welche auf KugelX draufaddiert wird. Sin(Winkel) macht das selbe, nur das es sich auf die Y achse bezieht. ------------------------------ BlitzBasic: [AUSKLAPPEN] For i = 0 To 1 For ist eine schleife. i ist eine variable, die in dieser schleife hochgezählt wird. i = 0 initialisert diese mit 0. Das heißt, zu Schleifen beginn ist i = 0. To gibt die bedingung an. to 1 heißt, sobald i > 1 ist, findet kein weiterer schleifendurchlauf statt. Zumindest ist das so in Blitzmax :> ----------------- Und zu nummer 3: BlitzBasic: [AUSKLAPPEN] ;kollision wände Es wird überprüft, ob die Kugel im Linken oder Rechten bildschirmbereich liegt, rate ich jetzt einfach mal. xmax dürfte die Rechte ecke sein, 0 die linke. Sollte einer dieser Fälle eintreten, wird der winkel einmal umgedreht. Merke: Ein Kreis hat einen Winkel von 360°. Da X und Y positionen per Winkel berechnet werden, wird dieser einfach komplett umgedreht. Schlägt er Links auf, so gehts nach rechts weiter, schlägt er rechts auf, so gehts links weiter. Ich hoffe ich konnte helfen. Hatte leider nichtmehr genug Zeit um alles zu lesen, aber habe dennoch grade einen Schreibe wahn. Muss dann mal los, schaue später nochmal nach, ob meine Geistigen ergüsse was gebracht haben ![]() Viel spass noch ^-^ |
||
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Danke für die Hilfreichen Antworten.
Trotzdem möchte ich nochmal zeigen was in meinem kopf passiert wenn ich folgendes sehe : BlitzBasic: [AUSKLAPPEN]
Das ist mir klar: BlitzBasic: [AUSKLAPPEN] If kugelx<60 Then Das Nicht: BlitzBasic: [AUSKLAPPEN] winkel=180-winkel
winkel=180-winkel In meinem "Kopf" ist jetzt winkel=0 Weil wenn: winkel = 180-winkel heißt für mich 180 = 180-180 Also stehe ich in dem Punkt weiterhin auf'm Schlauch. Sagt mir bitte was ich "Übersehe". Oder helft meiner Logik etwas auf die Sprünge. Vielen Dank für Euer Engagement. ![]() mfg pinO |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Winkel wird geändert, d.h. die Flugrichtung. 180° deuten nach links, 0° nach Rechts.
![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zunächst einmal:
"Winkel = 180 - Winkel" ist kein Ausdruck im mathematischen Sinn. Du darfst es also nicht so lesen: "180° = 180° - 180°" Vielmehr handelt es sich um eine Zuweisung, sprich.... "Der Winkel sei ab jetzt 180° minus seinem alten Wert" Es ist das gleiche wie bei ... "A=B+2" "A sei ab jetzt die Summe von B und Zwei" Das lustige (und damit unlogische) ist, das dies bei Programmiercode auch mit dem gleichen Wert vor und hinter dem "=" erlaubt ist: "A=A+2" "A sei ab jetzt die Summe aus A und Zwei" Nun zu den Winkeln, also,... die Kugel saust ja in einem bestimmten Winkel auf die Bande zu. Sagen wir mal 45°. An der Bande soll sie abprallen und dann saust sie ja mit einem anderen Winkel wieder zurück. Kommt sie mit 45°, dann wäre grade 135° der korrekte neue Winkel, mit dem sich die Kugel wieder entfernt. Kommt sie z.b. mit 0° auf die Bande, also senkrecht, dann soll die ja genau senkrecht wieder zurückprallen, was 180° entspräche. Kommt Sie z.B. ganz flach an die Bande z.b. mit 85°, dann soll sie sich auch ganz flach wieder von der Bande entfernen. Richtig wären also 95° Aus diesem Werten kannst Du nun eine Tabelle machen und nach einer Regelmäßigkeit suchen. Daraus liese sich dann eine Formel für beliebige Anprallwinkel erstellen: Code: [AUSKLAPPEN] Vorwinkel Nachwinkel
85° 95° 45° 135° 0° 180° -45° -135° -85° -95° eine Formel, die nun aus allen linken Werten als Ergebnis die rechten Werte liefert: Nachwinkel= 180° - Vorwinkel (Probiers aus! Es geht sogar mit -45°, weil... 180°- ( -45°) = 225° ...und das entspricht exakt den -135° : 360°-135° = 225° |
||
- Zuletzt bearbeitet von Midimaster am Fr, Jun 17, 2011 19:49, insgesamt 3-mal bearbeitet
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also brechnet er damit
Abprallwinkel = 180 - Aufprallwinnkel winkel = 180 - winkel z.b. Abprallwinkel =180° - Aufprallwinkel 135° Abprallwinkel = 45° ![]() ![]() ![]() ![]() ![]() ![]() |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, genau!
Wenn eine Kugel mit 135° rolt, dann rollt sie nach rechts unten. (siehe Zeichnung). in dieser Richtung könnte sie nur an der rechten Bande aufprallen. Wenn eine Kugel auf der rechten seite mit 135° aufprallt, dann kommt sie also von links oben und zieht Richtung rechts unten... Dann kommt die Bande und sie prallt ab.... Der neue Winkel ist dann 45°. d.h. kommt von rechts oben und zieht Richtung links unten. Schau Dir dazu das Bild von mir an. 45° zeigt nach links unten! [EDIT] Sieh nochmal in den vorherigen Beitrag von mir...ich habe da ganz oben noch eine Ergänzung eingefügt... [EDIT II] Was Dir dabei die Probleme bereitet, ist wahrscheinlich die Tatsache, das es sich bei den Winkeln um "Vektoren" handelt und nicht um Strahlen um ein Zentrum herum: Schau Dir den 45° Winkel in der Zeichnung mal an. Der läuft auf den Nullpunkt zu...Und wenn die Kugel nun über diesen Nullpunkt hinauslaufen könnte, so würde sie sich immer noch mit 45° bewegen, obwohl sie sich nun vom Zentrum entfernt. Du siehtst das sehr schön im Bild am Beispiel des 110° Winkels der von oben kommt als "110°-Winkel" und aber auch unten immer noch der "110°-Winkel" ist. Es geht eben um "Richtungsangaben". So ähnlich wie Himmelsrichtung: Richtung West = 0° Richtung Süden = 90° Richtung Osten = 180° SüdWest=45° SüdOst=135° |
||
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] If kugely<=0 Then
winkel=360-winkel EndIf If kugely>=600 Then winkel=360-winkel EndIf für kollision mit y wir 360 verwendet anstatt 180 kommt das davon das jetzt 180° bis 360° verwendet wird Code: [AUSKLAPPEN] 90° | | 180 ---------------------------|-------------------------------360 225° 315° 270° Hoffentlich strapaziere ich eure Geduld nicht zu arg. ![]() mfg pinO |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
lies mal den Nachtrag, den ich eben noch an den letzten Beitrg ergänzt habe...
Das es bei Y anders ist, hat vorallem wieder mit den Himmelsrichtungen zu tun. Erstelle eine Werte-Tabelle, damit Du es verstehst: kommt eine Kugel Richtung Süd-Osten auf die Bande zu, so prall sie Richtung Nord-Osten wieder ab. In Zahlen bedeutet das Süd-Ost= 135° Nord-Ost=225° Du brauchst mehrere Werte-Paare um die Formel zu erkenne, die dahinter steht. Ein wichtiges Werte-Paar ist immer der senkrechte Aufprall: kommt eine Kugel Richtung Süden auf die Bande zu, so prall sie Richtung Norden wieder ab. In Zahlen bedeutet das diesmal Süd= 90° Nord =270° Nun suche nach der Forrmel, die beides korrekt berechet: 135 ----> 225 90 ------> 270 es gibt nur eine Lösung: 360 -135 = 225 360 - 90 = 270 |
||
pinochino |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich kaue jetzt seit 6 Stunden auf diesem Thema herum.
Deine Beispiele und Erklärungen sind wirklich Klasse. Ich würde behaupten das Thema zu 50% verstanden zu haben und hoffe das fehlende Verständnis durch Übung und das schreiben von Testprogrammen hinzu zu gewinnen. Mein Notizblock ist vollgekrizelt mit Winkeln, Kreisen, Codeschnipseln etc. und ich glaube jetzt mache ich eine Pause und suche mir etwas Ablenkung. ![]() Morgen gehts dann weiter. ![]() Danke für deine Hilfe & Geduld. PS: Himmelsrichtungen find ich Großartig... damit fällts mir gleich viel leichter! ![]() mfg pinO EDIT: Neuer Tag, Neues Glück. bzw. Neues Denkvermögen. ![]() RICHTUNGSANGABEN war das Stichwort! Danke Midimaster Auf einmal ergibt alles einen Sinn, haha. Nochmal: Zitat: Danke für deine Hilfe & Geduld.
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group