Delphi-PRAXiS

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)

hibbert 28. Sep 2004 18:13


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

gordon freeman 28. Sep 2004 18:22

Re: Ein bzw. Ausfallswinkel
 
Du hast ja irgendwo die Bewegung der Shape stehen:

Delphi-Quellcode:
shape1.left:=shape1.left+x;
Um die Kugel "umzudrehen" brauchst du nur folgenden Befehl:

Delphi-Quellcode:
x:=x*(-1);
und sie dreht um!

alcaeus 28. Sep 2004 18:25

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

gordon freeman 28. Sep 2004 18:26

Re: Ein bzw. Ausfallswinkel
 
Okay, aber er kann sich ja wohl denken, dass er mit den shape1.top genau so verfahren kann...oder? :wink:

glkgereon 28. Sep 2004 18:58

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)....

atreju2oo0 28. Sep 2004 19:58

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)...

alcaeus 28. Sep 2004 20:11

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]

hibbert 28. Sep 2004 21:01

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

alcaeus 28. Sep 2004 21:01

Re: Ein bzw. Ausfallswinkel
 
Hi hibbert,

Zitat:

Zitat von hibbert
wie gut eignen sich die bisherigen vorschläge ?

Sollte eigentlich alles sein was du brauchst.

Greetz
alcaeus

hibbert 28. Sep 2004 21:05

Re: Ein bzw. Ausfallswinkel
 
gut ich werde mich dann mal versuchen....

ich meld mich nochmal, egal wie es ausgeht :wink:

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.)

glkgereon 29. Sep 2004 18:32

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