Reflektion eines Balles

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Reflektion eines Balles

Beitrag von kreeph »

Hallo, ich habe ein Programm geschrieben. Ein Ball wird bewegt in einem Fenster über die Edition von x- und y-Bewegungsvariablen. (In jeder Schleife wird die x- bzw. y-Position des Balles entsprechend dieser Variablen verschoben.)
Bisher habe ich bei Kollision mit den Wänden immer die jeweilige Variable mit -1 multipliziert, um so den Ball abprallen zu lassen.
Nun möchte ich ihn an einer schrägen Geraden abprallen lassen.
Hierfür muss ich jedoch die Bewegung umstellen, ich muss den Einfallwinkel berechnen, und die Bewegung schließlich vom Ausfallwinkel abhängig machen.

Nun wollte ich fragen, wie dies möglich ist.

Die totale Geschwindigkeit meines Balles kann ich mittels (x²+y²)^0,5 berechnen. Diese soll nach der Reflektion schließlich beibehalten werden. Von meiner Geraden ist lediglich die Steigung angegeben. Die Steigung der Ballbewegung ist folglich y/x.
Ich kann jedoch beim besten Willen keinen Weg finden, anhand des Ausfallwinkels wieder die Werte für x und y zu ermitteln.

Ich hoffe ihr könnt mir helfen, und eventuell Tipps geben, falls ich die Bewegung komplett umstellen müsste.

Danke im Vorraus,
kreeph
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Re: Reflektion eines Balles

Beitrag von gnasen »

Ich habe zwar mit Physik nichts am Hut, aber ich denke du wirst einfach die Bewegungsgeschwindigkeit in einen Vektor "v" speichern. Trifft der Ball nun auf ein Hinderniss, so ist diese Näherungsweise eine Gerade, also ebenfalls ein Vektor im Raum.
Nun würde ich den orthogonalen Vektor dieser Hindernisgerade bestimmen, und den Bewegungsvektor anhand dieses orthogonalen Vektors spiegeln.
Müsste also theoretisch nur ein wenig rumgerechne mit Vektoren sein ;)
pb 4.51
Benutzeravatar
kreeph
Beiträge: 98
Registriert: 24.02.2007 11:50

Re: Reflektion eines Balles

Beitrag von kreeph »

ja, so habe ich mir das auch gedacht :)
nur ist dieses "rumgerechne" gerade mein problem: ich weiß nicht, wie ich dei Bewegung in einem Vektor angebe, bzw, wie ich diese dann spiegeln kann.
Ich benutze PureBasic 3.30
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Reflektion eines Balles

Beitrag von DrShrek »

Nimmst doch einfach den Chipmunk4PB Wrapper:
http://www.purebasic.fr/german/viewtopi ... 11&t=23073
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Reflektion eines Balles

Beitrag von STARGÅTE »

Also:

BewegungsVektor -> BewegungWinkel:

Code: Alles auswählen

Angle = ATan2(Vector2D\x, Vector2D\y)
Speed = Sqr( Vector2D\x*Vector2D\x + Vector2D\y*Vector2D\y )
BewegungWinkel -> BewegungsVektor:

Code: Alles auswählen

Vector2D\x = Cos(Angle)*Speed : Vector2D\y = Sin(Angle)*Speed
Speed wäre hierbei die Länge des Vektors, die ja bei einer drehung unverändert bleibt

Für eine Reflexion an einer Wand gilt:
Einfallswinkel = Ausfallswinkel in Bezug auf das Einfallslot der Wand.
Wenn du eine Wand hast, hast du ja auch ein Ausdehnungsvektor (x,y), dessen Winkel du auch berechnen kannst.
Aus dem Winkel der Wand, kommst du dann leicht auf das Lot (+-90°) und kannst somit leicht Einfallswinkel und Ausfallswinkel bestimmen.
Dann "ein paar Winkel" addieren und Ergebnis ist der neue Winkel ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Re: Reflektion eines Balles

Beitrag von Spirit »

Man könnte auch einfach das Reflexionsgesetz in Vektorform nutzen:

Code: Alles auswählen

n_dot_v = nx * vx + ny * vy

rx = vx - 2 * n_dot_v * nx
ry = vy - 2 * n_dot_v * ny
(vx, vy) ist der Richtungsvektor des Balles, (rx, ry) der reflektierte Richtungsvektor und (nx, ny) der Normalenvektor der Gerade.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Reflektion eines Balles

Beitrag von DrShrek »

Habe mal eine Exe mit dem Chipmunk4PB Wrapper generiert:
Weil aber Kreise zu einfach sind habe ich gleich mal 10 Quader verwendet.

In 10 min alles implementiert ;-)

http://www.morty-productions.de/icesoft ... Bounce.zip
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Antworten