Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ein bzw. Ausfallswinkel (https://www.delphipraxis.net/30741-ein-bzw-ausfallswinkel.html)

Jens Schumann 28. Sep 2004 21:08

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:
y:=m*x+b
Damit der Einfallswinkel gleich dem Ausfallswinkel ist muss tatsächlich nur die Steigung m mit -1
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:
b:=x-m*y
Das ist eigentlich das ganze Geheimnis

hibbert 28. Sep 2004 21:18

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

hibbert 28. Sep 2004 21:27

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

Jens Schumann 28. Sep 2004 21:27

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:
m=(y2-y1)/(x2-x1)
Es handelt sich also um eine simple Geradengleichung.
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.

gordon freeman 29. Sep 2004 14:38

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:
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);
Du siehst, keinerlei Mathe :wink:

hibbert 29. Sep 2004 17:16

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

Jens Schumann 29. Sep 2004 17:33

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 ?

dizzy 29. Sep 2004 17:43

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.

Jens Schumann 29. Sep 2004 17:53

Re: Ein bzw. Ausfallswinkel
 
Zitat:

Zitat von dizzy
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.

Das kann nicht sein. Nur bei einem Winkel von 45° können x und y jeweils um 1 inkrementiert o. dekrementiert werden. Sobald ein anderer Winkel (nennen wir ihn mal Startwinkel) gewünscht ist klappt das nicht mehr. Wie wird denn y berechnet bei einem Winkel von 30° ?
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:
y=m*x+b
gehen

dizzy 29. Sep 2004 18:06

Re: Ein bzw. Ausfallswinkel
 
Zitat:

Zitat von gordon freeman
Delphi-Quellcode:
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);

Die Schrittweite ist doch garnicht 1 :gruebel:. Die ist hier beliebig gehalten -> das *(-1) dreht doch nur das Vorzeichen.

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 Gravitationssimulator, und das klappt. Da hatte ich auch erst wilde Vektorrechnung drin, bis ich gemerkt hab dass es ja bei den einfachen Begrenzungen auch einfacher geht :). (Würde man allerdings die Kugeln voneinander abprallen lassen, dann wird die ganze Sache ungleich komplizierter, das stimmt.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.
Seite 2 von 3     12 3      

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