PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Physik] Ball + Fläche = Boing



Dingsi
09.05.2005, 16:06
http://home.arcor.de/dthorm/wtfshouldido.jpg
Schön, oder?

Also. Ich hab nen Ball. Der Ball fliegt mit ner gewissen Kraft (gespeichert als ein Vektor) durch die Gegend. Nun hab ich auch noch ne Fläche (ne Linie, erstmal). An der Fläche soll der Ball nun abprallen. Tjo.. ich habs zwar schon geschafft, dass der Ball an Flächen von 90° und 180° abprallt - das ist ja leicht: einfach den dx bzw. dy Wert vom Kraft-Vektor-Dingsbums mit -1 malnehmen - aber wie mach ich das nun, wenn die Fläche auch schief sein kann? Wie berechne ich da dynamisch welche Kraft ich auf die Kraft im Ball addieren muss, damit der Ball abprallt. Und so. Verstanden? ;_;

Nuja.. danke schonmal für mögliche Hilfe.

Ach, nochwas. Der Ball bewegt sich nicht immer nur 1,1 oder -1,0 oder so, sondern auch mal 0.8,-0.5 oder 0.03,3,667 usw.

Ynnus
09.05.2005, 16:42
Ich weiß ja nicht, wie viel Hintergrundwissen du da hast, aber generell gilt ja, Einfallwinkel = Ausfallwinkel. Heißt also, der Ball kommt mit 20 ° auf eine Wand auf und geht dann auch wieder mit 20 ° gespiegelt an der Senkrechten ab. Anders gesagt, 180° minus Einfallwinkel = Ausfallwinkel.
Demnach musst du wissen, in welchem Winkel die Wand zum Ball steht, unter welchem Winkel der Ball auftrifft, um den korrekten Ausfallwinkel zu berechnen.

Dingsi
09.05.2005, 18:47
Das weiß ich auch. Das Problem ist, dass ich den Winkel des Balls ja im selben Wert speichere wie die Geschwindigkeit. Ich kann also nicht einfach den Winkel umdrehen.
Außer jemand erklärt mir wie ich aus dem Vektor Winkel und Geschwindigkeit rauskriege, Winkel umdrehe und dann wieder Winkel und Geschwindigkeit zusammenrechne.

Manni
09.05.2005, 18:59
Ich empfehle mal das hier:
http://www.uni-protokolle.de/foren/viewt/17523,0.html

http://www.atomium.gmxhome.de/temp/0312_form2.jpg
Ich hoffe das hilf dir ;)

Manni

Dingsi
09.05.2005, 19:10
Wie multipliziert man nen Vektor mit ner Matrix? o_o

[19:12:22] <+MagicMagor> Vx = Mx1 * Vx + Mx2 * Vx ... | Vy = My1 * Vy ...

Ynnus
09.05.2005, 19:33
Aus Vektor Winkel:

Meines Wissens nach ist ein Vektor definiert durch 3 Richtungsangaben, X, Y und Z. Belassen wir es der Einfachkeit halber erst einmal bei X und Y im zweidiemensionalen Raum. (Arg, ich seg gerade, die Bezeichnung z in meiner SKizze ist unglücklich gewählt. Das soll nicht der Z-Vektor sein sondern nur eine Variable welche die resultierende Richtung und Geschwindigkeit darstellt.)

http://derfeind2k.de/daten/skizze.png
(Der Aufprallwinkel ganz oben links ist nur für den Fall, das die Wand horizontal gerade ist. Ansonsten muss noch der Winkel der Wand hinzu addiert werden, die im mittleren Teil des Bildes).

In der Zeichnung wird eigentlich alles erklärt (wenn ich es denn richtig bedacht habe ^^). Zuerst den Ausfallwinkel errechnen: Winkel = 180 - (Einfallwinkel + Winkel des Objekts)
und dann mit neuem Winkel (2* ß + a) und der Geschwindigkeit, nämlich der Länge der Seite Z, der Hypotenuse, die neuen Vektoren X und Y errechnen. Dadurch bleibt die Geschwindigkeit die gleiche und die Vektoren werden der neuen Richtung angepasst.

Wie das jetzt in einem dreidimensionalen Raum aussieht, mag ich mir gerade nicht vorstellen. Versuchs mit einem 2D Beispiel erstmal, danach in 3D.

(Für mögliche Fehler übernehmen ich keine Verantwortung)

Ineluki
10.05.2005, 07:07
Ich haette da eine Idee ... habs jetzt zwar nicht mathematisch bewiesen, aber es scheint mir logisch ... ^__^

Als erstes brauchst du den Normalenvektor N der Ebene, sprich einen Vektor, der senkrecht auf deiner Ebene steht, und die Laenge 1 hat. In 3D waere eine Moeglichkeit das Kreuzprodukt zweier beliebiger linear unabhaengiger Vektoren in der Ebene zu bilden, und dann mit dem Reziprokwert der Laenge des Normalenvektors zu multiplizieren.
[
Eine Formel sagt mehr als tausend Worte:
N:Normale, A,B zwei Vektoren in der Ebene, die nicht in die selbe Richtung zeigen
Grosse Buchstaben: Vektoren, kleine Buchstaben Zahlen

N.x = A.y*B.z - A.z*B.y;
N.y = B.x*A.z - A.x*B.z;
N.z = A.x*B.y - A.y*B.x:
s = sqrt(N.x*N.x + N.y*N.y + N.z*N.z)
N = 1/s * N = { N.x/s, N.y/s, N.z/s };
]

Als naechstes berechnest du die Projektion P deines Geschwindigkeitvektors auf die Normale N. Das geht ueber ein einfaches Skalarprodukt mit anschliessender skalarer Multiplikation mit dem Normalenvektor. Die Projektion zeigt nun in die selbe Richtung, wie die Normale. Allerdings ist die Laenge jetzt die Urspruengliche Geschwindigkeit multipliziert mit dem Cosinus des eingeschlossenen Winkels.
[
V: Geschwindigkeit, N: Normale von oben, P: Projektion
p = V*N = V.x*N.x + V.y*N.y + V.z*N.z; // Skalarprodukt V dot N
P = p*N = {p*N.x, p*N.y, p*N.z}; // skalare Multiplikation p * N
/* Da der Ball ja von zwei verschiedenen Seiten die Ebene treffen kann, aber der
* Normalenvektor immer gleich ist, eine Spitzfindigkeiten zu beachten.
* -> ist V+P laenger als V, so multiplizieren wir P mit -1
*/
]

Wie man zeigen kann, bildet die Projektion P und die Geschwindigkeit V zwei Seiten eines rechtwinkligen Dreiecks (wegen dem angewendeten Kosinussatz). Die fehlende Steite D ist der Vektor, den wir als naechstes suchen. Wie man leicht sieht, muss V + P - D = 0 sein, da man, wenn man das ganze Dreieck abfaehrt wieder am Ausgangspunkt sein muss. Somit ist D = V + P. Wenn man nun zur Ausgangsposition 2 * D hinzuaddiert, erhaellt man den Pukt Q als Vektor V gespiegelt an P bezueglich des Fusspunktes von P. Wir wollen aber den neuen Geschwindigkeitsvektor W haben, also den Vektor von Q bezueglich des Fusspunktes. Somit ergibt sich, wie man leicht sieht, die Gleichung V + W - 2*D = 0, und unsere neue Geschwindigkeit zu W = 2*D - V

Zusammengefasst mit der Formel fuer D ergibt dies: W = V + 2*P was unsere finale Formel darstellt.

Alles in allem eine recht einfache geometrische Aufgabe.
Bei Fragen stehe ich gerne zur Seite ^__^

Ich bin dann auch mal nicht so geizig und hab ein paar Bildchen gemacht zur Veranschaulichung ...

http://staff.onsetsu.de/ineluki/bilder/misc/VectorProjection.png

http://staff.onsetsu.de/ineluki/bilder/misc/VectorBounce.png

Ynnus
10.05.2005, 09:33
Eine Formel sagt mehr als tausend Worte:
Etwas offtopic aber dem kann ich nicht zustimmen.^^
Weiß ich aus eigener Erfahrung, dass mir eine schöne Erklärung mit Text und Bildchen viel mehr zusagt als eine Formel die ich dann selbst herleiten darf. ;)

Ineluki
11.05.2005, 02:14
so .. hoffentlich ists jetzt etwas anschaulicher ^__^

Das stimmt zwar schon in gewisser weise, aber oftmals trivialisieren bestimmte Darstellungen eine bestimmte Sachlage zusehr. Und in anderen Faellen wieder kann man auf ine blosse Formel einen formalen Algorithmus anwenden, der zu ganz aussergewoehnlichen Resultaten fuehrt, auf die man unter darstellenden Formulierungen niemals gekommen waere. (Z.B. kann man Laubbaeume als Vektorraum ueber dem Koerper der ganzen Zahlen auffassen oder Verschluesslungsoperationen als Matrix- und Metrikoperatoren auf Elementen ueber Produktmengen von Buchstaben usw usw :p )