![]() |
Re: Ein bzw. Ausfallswinkel
Hallo,
ohne ein bißchen Mathematik geht es hier nicht. Die Kugel bewegt sich auf einer Geraden. Eine Gerade wird duch folgende Funktion beschrieben
Code:
Damit der Einfallswinkel gleich dem Ausfallswinkel ist muss tatsächlich nur die Steigung m mit -1
y:=m*x+b
multipliziert werden. Wenn die Kugel die Bande berührt hat man die x u. die y-Koordinate. Damit kann dan der neue Schnittpunkt b mit der Y-Achse berechnet werden.
Code:
Das ist eigentlich das ganze Geheimnis
b:=x-m*y
|
Re: Ein bzw. Ausfallswinkel
@ Jens Schumann:
kannst du mir dass bitte noch mal etwas ausführlicher erklären, zb. was ist y , m, b und x ? Und wann sollte ich welche "Formel" verwenden ? thx hibbert |
Re: Ein bzw. Ausfallswinkel
@ Jens Schumann:
kannst du mir dass bitte noch mal etwas ausführlicher erklären, zb. was ist y , m, b und x ? Und wann sollte ich welche "Formel" verwenden ? thx hibbert // edit: Doppelpost wegen DB Fehler. Kann den hier bitte wer löschen ? thx |
Re: Ein bzw. Ausfallswinkel
Hallo hibbert,
es handelt sich um Mathematik der 8. Klasse. Das solltest aberdrauf haben wenn Du ein Pong-Clone schreiben willst !!!! y ist die y Koordinate in Pixel auf dem Formular. x ist die x Koordinate in Pixel auf dem Formular. m ist die Steigung b ist der Schnittpunkt mit der Y-Achse. m brechnet sich wie folgt
Code:
Es handelt sich also um eine simple Geradengleichung.
m=(y2-y1)/(x2-x1)
Diese Geradengleichung musst Du verwenden um Deine Kugel oder so über das Formular zu bewegen.Um die Kugel über das Formular zu bewegen muss Du ja die x und y Koordinaten der Kugel verändern. Den x Wert gibst Du vor und berechnest mit der Geradengleichung den dazugehörigen y-Wert. Wenn die Kugel die Bande berührt multiplzierst Du m mit -1 und berechnest dann den neuen Wert für b. Damit berechnest Du dann weiter. Die Mathematik musst Du drauf haben. Die kann ich Dir hier nicht erklären. |
Re: Ein bzw. Ausfallswinkel
Will jetzt deine Formel für eine Gerade nich schlecht machen, aber imho reicht es völlig, die Bewegung umzukehren, wenn die Pong-Kugel am oberen/unteren Rand ist, bzw. einen der Balken trifft. Hab selbst mal 'nen Pong-Clon geproggt und braucht keinerlei Mathe :)
Bei mir sah es wirklich nur so aus:
Delphi-Quellcode:
Du siehst, keinerlei Mathe :wink:
Procedure BallBewegen;
var x,y:integer; //x für waagerechte, y für senkrechte Bewegung begin shape1.left:=shape1.left+x; shape1.top:=shape1.top+y; if {Kugel am oberen Rand} or {Kugel am unteren Rand} then y:=y*(-1); if {Kugel am linken Balken} or {Kugel am rechten Balken} then x:=x*(-1); |
Re: Ein bzw. Ausfallswinkel
@gordon freeman:
Ich hab es jetzt auch so gemacht, und es funz auch :wink: aber trotzdem ein dickes danke an alle... thx hibbert |
Re: Ein bzw. Ausfallswinkel
Hallo,
kann es sein, dass der Ein- u. Ausfallswinkel immer 45° beträgt. :gruebel: Wie würdet Ihr bei einem beliebigen Winkel vorgehen ? |
Re: Ein bzw. Ausfallswinkel
Genau so ;)
Problematisch wird's, wenn die Grenzen nicht mehr oben/unten/links/rechts sind, sondern mal eine schiefe Bande rein kommt. Dann reicht das so nicht mehr, aber für eine auf einer Kante stehenden rechteckigen Begrenzung klappt das so. Ohne schiefe Banden wird der Ball allerdings nie einen (betragsmäßig) anderen Winkel zu den Banden bekommen, als er von Anfang an hat. |
Re: Ein bzw. Ausfallswinkel
Zitat:
Damit es tatsächlich wie eine Bewegung zur horizontalen mit einem Winkel von 30° aussieht muss y in Abhängigkeit von x berechnet werden. Bei 45° kann man hier y=x setzen oder y u. x unabhängig voneinander inkrementieren o. dekrementieren. Bei jedem anderen Winkel muss man über
Code:
gehen
y=m*x+b
|
Re: Ein bzw. Ausfallswinkel
Zitat:
Sagen wir mal: xStep = 1 yStep = 2 (also der Koordinatenzuwachs pro Cycle) Bei einer Refelxion an der unteren Kante wird nun "yStep=yStep*(-1)" gemacht, und dann haben wir: xStep = 1 yStep = -2 Der Winkel ist nicht 45°, aber trotzdem korrekt reflektiert. \\edit: Genau so mache ich das im Übrigen auch bei meinem ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz