Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi 2 kreise sollen bei kontakt abprallen (https://www.delphipraxis.net/32706-2-kreise-sollen-bei-kontakt-abprallen.html)

dizzy 27. Okt 2004 23:14

Re: 2 kreise sollen bei kontakt abprallen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von fiasko
kann du mal einen dezentralen Stoß bei 2 Kreisen aufmalen

Klar, siehe Anhang. Die Kugeln treffen sich ja nicht genau, sondern "schlittern" aneinander vorbei. Die Richtungsvektoren an sich zu bekommen ist imho nicht so schwer, aber wie sieht es mit der Geschwindigkeitsverteilung aus? Da gibt's mit Sicherheit auch eine Formel für... ;).
Aber es ist zunächst mal etwas aufwändiger als ein zentraler Stoß, bei dem ja der volle Impuls der stoßenden Kugel auf die ruhende Übergeht. Man merke auf: Eine der beiden ruht! Wenn sich beide bewegen wird's auch schon wieder was kniffliger, selbst beim zentralen Stoß.

xineohp 28. Okt 2004 01:03

Re: 2 kreise sollen bei kontakt abprallen
 
moin,

Das Thema Kollision von Kugeln hatten wir schonmal. Hatte mich damals mal damit beschäftigt ... bin aber leider zu keinem 100%ig korrekten Ergebnis gekommen. (Ansatz wie von fiasko beschrieben) Aus einem mir unbekannten Grund werden nur senkrechte Kollisionen richtig berechnet, bei allen "schiefen" Varianten treten Fehler auf?!
Ins besondere bei mehr als zwei Kugeln werden die Dinger immer schneller!

lezter Post im alten Thread (der Rest ist meines Erachtens nicht wirklich relevant): hier

dizzy 28. Okt 2004 02:23

Re: 2 kreise sollen bei kontakt abprallen
 
Also ich hab jetzt mal etwas rumgegoogled, und bin doch sehr erstaunt darüber, dass es zu dem dezentralen Stoß von Kugeln erbärmlich wenig Material gibt.
Diese Tatsache, und das Bischen (wenig brauchbares) was ich gefunden habe zeigen mir, dass dies ein garnicht sooo leichtes Thema ist.

Aus einer Überlegung heraus würde ich behaupten, dass wenn eine Kugel steht, und von einer anderen getroffen wird, die stoßende Kugel einen Anteil ihres Impulses auf die ruhende Kugel überträgt, und zwar mit:

Impuls*cos(alpha)

wobei alpha der Winkel zwischen der Geraden durch die Mittelpunkte der Kugeln, und dem Richtungsvektor der stoßenden Kugel ist; und zwar zum Zeitpunkt des Aufpralls.

Die stoßende Kugel verliert diesen Impuls, so dass die Impulserhaltung gewahrt wäre. "Impuls" ist hier übrigends gleich mit Geschwindigkeit, verknüpft mit einer Richtung. Also entspricht der Impuls einem Vektor => dem Richtungsvektor. Seine Länge muss je Kugel entsprechend o.g. Zusammenhangs skaliert werden.

Was noch ein ganz anderes Problem ist: In welche Richtung zeigen denn die Vektoren nach dem Stoß?

Und was noch viel schlimmer ist: Wenn sich beide Kugeln bewegen, dann kann das noch mal ekeliger werden.

Es kann gut sein, dass ich mich durch das ganze Zeug dass ich gefunden habe jetzt völlig verbohrt bin, und dass das eigentlich voll einfach ist... ist ja auch nicht mehr so früh :pale:.
Mich würde eine Gesamtlösung für den dezentralen vollelastischen Stoß zweier nicht ruhender Kugeln jetzt auch sehr interessieren... da habt ihr was angerichtet :D.

Au Backe... wenn da noch Rotation+Gleitreibung+Haftreibung mit bei kommen... :stupid: ich frage mich, wie so ein Billardspiel das macht... kann doch eigentlich garnicht so schwer sein, oder? :gruebel:



Oh warte! Idee!
Über die Vektoren könnte es tatsächlich recht einfach gehen.
Nennen wir mal einen Richtungsvektor der Kugel 1: V1 und der Kugel 2: V2
Nennen wir die Mittelpunkte der Kugeln: M1 und M2
Die Gerade durch die Mittelpunkte: G
Den Winkel von V1 zu G nennen wir a1,
den Winkel von V2 zu G nennen wir a2.

Der Impulsanteil der von Kugel 1 auf Kugel 2 übergeht ist dann:
cos(a1) (zum Zeitpunkt des Aufpralls)
Der Impulsanteil der von Kugel 2 auf Kugel 1 übergeht ist:
cos(a2) (zum Zeitpunkt des Aufpralls)

Dann ist der Richtungsvektor von Kugel 1 nach dem Stoß:
V1' = V1 + V2*cos(a2) - V1*(1-cos(a1))
Und der von Kugel 2:
V2' = V2 + V1*cos(a1) - V2*(1-cos(a2))

Damit wäre der Impuls gewahrt, und die Richtungen dürften auch stimmen. Ein wenig Kopfzerbrechen bereitet mir der Cosinus, aber ich hab das mal für ein paar Fälle von Hand gerechnet, und das sah nicht so falsch aus. (Vorausgesetzt ich hab zu dieser doch zu sehr fortgeschrittenen Zeit keine bösen Patzer gemacht :freak:.)

Ich geh jetzt erstmal an der Matratze horchen :).
N8 alle!
Fabian

die.sandra 28. Okt 2004 08:06

Re: 2 kreise sollen bei kontakt abprallen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich glaube ich hatte mich etwas falsch ausgedrückt. Das soll keine simulation eines billardspiels werden!!!!
Nochmal:
1. aufgabe war: ein shape (kreis), der sich nur nach rechts bewegt. der läuft dann aber irgendwann
aus dem form1 raus. also muss der abprallen, sowohl rechts also auch links. also hatte ich dann
nen kreis der von links nach rechts läuft und umgekehrt.
2. jetzt sollte der kreis schräg laufen, also runter+rechts und so weiter. natürlich sollte der
kreis dann auch wieder an den rändern von form1 abprallen.
*war ganz schön happy als ich das dann schon mal geschafft hatte* :hello:
3. jetzt sollte ein zweiter kreis genau das gleiche machen . no problem
4. jetzt sollten die shapes aneinander abprallen, sprich genauso wie sie es an den rändern machen.
ich weiß aber nicht was ich programmieren soll, was die kreise machen sollen wenn sie sich
berühren. habe schon mal geprüft ob denn der erste teil "if" richtig ist, indem ein
label dann die farbe ändert. und es ändert die farbe *jippie*

=== jetzt sollen die kugeln halt abprallen im richtigen winkel, aber auch nur das. nicht noch mit
richtiger geschwindigkeit u.ä.!!!!!!!!!!!!

Zitat:

öhm... leute meint ihr nocht des is fürn delphi-anfänger bisschen schwierig des so auf einmal zu machen? ich würde sagen eins nach dem anderen ...

prüfen wann sie sich berühren ... dann abprallen lassen(gleiche geschwindigkeit) ... die richtung ermitteln ... und dann weitersehen

Oder so wie ihr, aber da sag ich nur:

mfg
freak
GENAU DAS!!!!!!!!!

Sandra

ps: mach das hier nicht inner schule. das hier ist praktikum seit montag. was heißt ich habe montag zum ersten mal delphi gesehen!?! also ich fin das ja auch sehr (!!!) schwer, weil ich ja überhaupt keine ahnung hab was ich in delphi schreiben soll! :cry:
also wäre es mir im prinzip vollkommen egal, ob ich hierbei was lerne oder nicht. schätze mal, dass ich das sowieso ziehmlich schnell wieder vergessen werde, wenn das praktikum nächsten freitag zu ende ist. ich glaube ich werde dann auch nicht mehr was in dieser richtung machen. :roll:

Trotzdem will ich das mit den düssiligen kreisen jetzt schaffen! oder zumindest versuchen mit sehr viel hilfe von euch! :mrgreen:


PPS: Mein quelltext

freak4fun 28. Okt 2004 08:24

Re: 2 kreise sollen bei kontakt abprallen
 
hallo

also ich finde des schon ganz gut was du geschaft hast sandra :cat:

ich hab mal son bisschen rumgespielt, aber ich denke ich mach das zu kompliziert :wall: aber bin eher der typ der erstmal beim probiren auf die fr***e fällt :angel2:

ich schau mir deinen quelltext an und schau dann weiter

mfg
freak

freak4fun 28. Okt 2004 08:30

Re: 2 kreise sollen bei kontakt abprallen
 
hallo

ja öhm... also :drunken:

sandra könntest du vielleicht alle notwendigen Dateien für delphi schicken? :gruebel: :mrgreen:

Am besten (ich hoffe du hast einen) den Projektordner zippen und hochladen. :angel2:

thx

mfg
freak

freak4fun 28. Okt 2004 09:39

Re: 2 kreise sollen bei kontakt abprallen
 
hallo

entschuldigung wegen drei mal hintereinander posten, aber ich bekomm noch nicht mal hin das des ding von der wand abprallt und hin- und herläuft. Kann mir da mal bitte jemand helfen?

(ich wollt kein neuen Thread aufmachen)
:wiejetzt:

//Edit: Bitte mit Lokalen Variablen.

mfg
freak

fiasko 28. Okt 2004 12:39

Re: 2 kreise sollen bei kontakt abprallen
 
Hallo,

Zitat:

Zitat von dizzy
Zitat:

Zitat von fiasko
kann du mal einen dezentralen Stoß bei 2 Kreisen aufmalen

Klar, siehe Anhang. Die Kugeln treffen sich ja nicht genau, sondern "schlittern" aneinander vorbei. Die Richtungsvektoren an sich zu bekommen ist imho nicht so schwer, aber wie sieht es mit der Geschwindigkeitsverteilung aus? Da gibt's mit Sicherheit auch eine Formel für... ;).
Aber es ist zunächst mal etwas aufwändiger als ein zentraler Stoß, bei dem ja der volle Impuls der stoßenden Kugel auf die ruhende Übergeht. Man merke auf: Eine der beiden ruht! Wenn sich beide bewegen wird's auch schon wieder was kniffliger, selbst beim zentralen Stoß.

hast du dir mal meinen Ansatz bzw. den von der Web-Site richtig durchgelesen? Sowohl ich als auch die haben einen dezentralen Stoß aufgemalt und dann einfach über das Skalarprodukt den Anteil für den direkten Stoß! Wenn man jetzt natürlich noch die durch die Haftungreibung entstehende Rotationsenergie mit reinrechnet wird es aufwendiger - aber das soll hier wohl doch nicht sein.

@die.sandra:

Wenn ich das richtig verstanden habe soll die Kugel nur an den Wänden abprallen? Das ist dann ganz einfach: du hast doch irgendwo 2 Variablen für die X und die Y verschiebung für jeden Takt?! Wenn das ding an die Decke oder am Boden abprallt ändert sich das vorzeichen beim Y, sonst beim X und fertig.

Wenn du den Code der Unit des Formulars postest können wir auch noch genauer helfen, nur die .dpr reicht nicht :mrgreen:

dizzy 28. Okt 2004 13:18

Re: 2 kreise sollen bei kontakt abprallen
 
Zitat:

Zitat von fiasko
hast du dir mal meinen Ansatz bzw. den von der Web-Site richtig durchgelesen?

:oops: Scheinbar nicht... aber guck mal auf die Uhrzeit meines Posts, da kann man das nicht mehr erwarten :wink:. Das Verfahren scheint mir schlüssig.

Bei meiner Idee von gestern ist mir als ich im Bett lag auch noch ein Denkfehler aufgefallen. die Formeln müssten eigentlich so heissen:
V1' = V1*(1-cos(a1)) + V2*cos(a2)
V2' = V2*(1-cos(a2)) + V1*cos(a1)

Jetzt wäre natürlich interessant, ob der Weg über das Skalarprodukt und mein Gewurschtel identisch sind (zumindest fände ich das interessant :D). Was aber klar sein dürfte ist, dass sich der Weg über's Skalarprodukt deutlich performanter proggen lässt als mein Trigonometrie-Haufen - wobei man, wenn man sich anschaut wie man den Winkel zwischen 2 Vektoren ausrechnet, sich die ganzen Cosinüsse (:)) auch sparen kann!

Zitat:

Zitat von die.sandra
jetzt sollen die kugeln halt abprallen im richtigen winkel, aber auch nur das. nicht noch mit
richtiger geschwindigkeit u.ä.!!!!!!!!!!!!

Mit dem richtigen Winkel hast du auch gleich die richtige Geschwindigkeit. Die gehören einfach zusammen ;).

lg,
Fabian

dizzy 28. Okt 2004 14:29

Re: 2 kreise sollen bei kontakt abprallen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab mal beide Methoden verglichen, und sie sind im Endeffekt gleichwertig. Hab mal angehängt, wie sich das Ganze sehr einfach, und ohne jede trigonometrische Funktion lösen ließe. Da viele Redundanzen drin sind, ist das auch recht flott programmierbar (schätze ich). Das dürfte im Wesentlichen die Lösung sein, der man öfter begegnet, die aber immer so sau-blöd verklausuliert wird. Zumal die meisten da anfangen mit Winkel und irgendwelchen Wörtern die kein Mensch braucht, aber keiner schreibt einfach mal ne endgültige Formel hin! :stupid:

Ich hoffe jetzt mal, dass das einigermaßen richtig ist, dass ich mich nachher mit meinem 1001. Post (:party:) nicht zum Brot mache :).


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz