![]() |
Ein bzw. Ausfallswinkel
Hi,
ich möchte gerne eine Kugel über meine Form bewegen. Nun soll diese aber auch wieder im richtigen Winkel vom Formrahhmen abspringen. Wie brechne ich, wie die Kugel (mit der Komponente Shape) wieder abprallen müsste ? Kann ich das einfach über die Eigenschaften Left und Top des shapes machen ? thx hibbert |
Re: Ein bzw. Ausfallswinkel
Du hast ja irgendwo die Bewegung der Shape stehen:
Delphi-Quellcode:
Um die Kugel "umzudrehen" brauchst du nur folgenden Befehl:
shape1.left:=shape1.left+x;
Delphi-Quellcode:
und sie dreht um!
x:=x*(-1);
|
Re: Ein bzw. Ausfallswinkel
Hi Martin,
ganz stimmt dies nicht. Dein Code funktioniert für die linke und rechte Grenze. Trifft das Shape jedoch auf den oberen oder unteren Rand, so muss die y-Änderung verändert werden. Greetz alcaeus |
Re: Ein bzw. Ausfallswinkel
Okay, aber er kann sich ja wohl denken, dass er mit den shape1.top genau so verfahren kann...oder? :wink:
|
Re: Ein bzw. Ausfallswinkel
aber er machts wahrswcheinlich (der frage nach) so, das er den winkel hat, und nach dem berechnet..oder?
dann musst du irgendwo aber auch das so rechnen, das su sie werte für die bewegung in x/y richtung hast, dann wieder *(-1).... |
Re: Ein bzw. Ausfallswinkel
Sowas lässt sich sehr einfach mit Vektoren ausrechnen...
Solange man aber nur ein Rechteck als Begrenzung hat( die Form) Ändert sich der Winkel auch nicht! (Natürlich vorausgesetzt man startet mit 45° ) Somit reicht die Lösung von Gordon Freeman... Falls noch "schiefe" Grenzen auftauchen sollte man IMO auf Vektoren zurückgreifen (Is ja eh nur 2D)... |
Re: Ein bzw. Ausfallswinkel
Hi Thomas,
es funktioniert nicht nur, wenn der Startwinkel 45% beträgt. Es gilt: Einfallswinkel=Ausfallswinkel, das heißt dass sich bei einer Berührung der rechten oder linken Formgrenze die y-Änderung der Koordinate nicht verändert. Greetz alcaeus [add]Und bei schiefen Grenzen wirds wirklich kompliziert[/add] |
Re: Ein bzw. Ausfallswinkel
Naja, ich habe so ewtas vor wie das alte Pong - Spiel zu proggen. (Das mit den beiden strichen links und rechts und dem ball in der mitte)
Ich möchte das gerne mit den standard kompos machen, also keine weiteren extra dafür installieren... wie gut eignen sich die bisherigen vorschläge ? hibbert |
Re: Ein bzw. Ausfallswinkel
Hi hibbert,
Zitat:
Greetz alcaeus |
Re: Ein bzw. Ausfallswinkel
gut ich werde mich dann mal versuchen....
ich meld mich nochmal, egal wie es ausgeht :wink: |
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 ![]() |
Re: Ein bzw. Ausfallswinkel
da kann ich ihm voll und ganz zustimmen...
wenn man am anfang einen winkel hat muss man den einmal in x-pro-cycle und y-pro-cycle umrechnen, danach is die methode völlig korrekt! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 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