Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

freak4fun 27. Okt 2004 15:17

Re: 2 kreise sollen bei kontakt abprallen
 
öhm... leute meint ihr nocht des is fürn delphi-anfänger bisschen schwierig des so auf einmal zu machen? :gruebel:
ich würde sagen eins nach dem anderen ... :angel:

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

Oder so wie ihr, aber da sag ich nur: :wiejetzt:

mfg
freak

freak4fun 27. Okt 2004 15:20

Re: 2 kreise sollen bei kontakt abprallen
 
öhm...

könntest du vielleicht mal posten was du schon hast?
... son bisschen quelltext vielleicht :mrgreen:

und wenn hier mal jemand ne komplette lösung posted bekommt man was aufn deckel weil doch jeder selbst alles rausfinden bzw wissen soll :pale:

aber keine angst wir helfen dir schon :idea:


mfg
freak

StefanDP 27. Okt 2004 15:57

Re: 2 kreise sollen bei kontakt abprallen
 
Da steht es 1:1 wie es geht (also von der Physik seite betrachtet):
http://www.tobias-nopper.de/BillardG...physik-de.html

Ist aber eher ein exterm mathematisches Problem!

dizzy 27. Okt 2004 16:19

Re: 2 kreise sollen bei kontakt abprallen
 
Zitat:

Zitat von freak4fun
und wenn hier mal jemand ne komplette lösung posted bekommt man was aufn deckel weil doch jeder selbst alles rausfinden bzw wissen soll :pale:

Was ja auch völlig korrekt so ist. Sonst ist der Lerneffekt = 0, und darum geht es in der Schule nun mal ;).

Man wird, wenn man in etwa an das Verhalten von Billiardkugeln heranzukommen, um Mathe+Winkel+Vektoren nicht herum kommen. Ich bin mir nichtmal mehr sicher, ob ich die Grundlagen dazu schon in der 11. Klasse komplett hatte :gruebel:.
Alles in allem finde ich die Verwendung von Shapes schon... naja, reichlich unschön. Aber wenn es denn sein soll ;).

Das Problem mit der Geschwindigkeit:
Du hast für jeden Kreis ja einen Ortsvektor, der dir angibt wo sich dein Kreis befindet, und zudem einen Richtungsvektor der jeden Bewegungsschritt auf den Ortsvektor addiert wird. Die Länge dieses Richtungsvektors ist die Geschwindigkeit des Kreises (in Pixel pro Intervall).
Wenn du den Aufprallwinkel dann mal hast, und man davon ausgeht, dass beide "Kugeln" die gleiche Masse haben, dann verteilen sich nach dem Stoß die beiden Richtungsvektoren beider Kugeln gleichmäßig. => Beide Kugeln sind nachher gleich schnell. Und das sogar nur bei einem direkten Stoß. Wenn die Kugeln dezentral aufeinanderprallen, dann verlagert sich der Impuls wiederum anders.

Wenn du dann auch noch möchtest dass man simuliert, dass bei einem Stoß ja ein Teil der Energie in Wärme übergeht, und somit der Geschwindigkeit fehlt, dann musst du die Richtungsvektoren auch noch um einen Faktor kleiner skalieren.

Alles in allem ist der dezentrale Stoß von Kugeln ein nicht zu unterschätzendes Thema. Und mit der Programmiereung braucht man imho erst garnicht anzufangen, wenn man die Theorie dahinter nicht vertanden hat.
Wenn du weisst welche Größen du kennst, und wie sie miteinander zu verrechnen sind, dann ist der eigentliche Code die wenigste Arbeit, da Delphi ja syntaktisch so schön an der Mathematik orientiert ist ;).

Wenn du die Aufgabe so von deinem Lehrer hast, würde ich ihn mal fragen ob das sein Ernst war - oder dich selbst, ob du im Unterricht alles mitbekommen hast :wink:.

Nach fertigem Code fragen bringt dich idR kein Stück weiter - und zudem wirst du den hier wahrscheinlich auch nicht bekommen.


@StefanDP: Dort ist aber auch nur der zentrale Stoß beschrieben. Der ist deutlich einfacher, aber reicht für eine brauchbare Billard-Simulation leider nicht.
Zwar läuft das mit den Richtungen gleich ab, aber das Problem mit der Geschwindigkeitsverteilung bleibt.
Ist die Frage wie weit man gehen will :). (Der Tisch hat nen Reibungskoeffizenten, die Kugeln auch z.B. :mrgreen:)

Gruss,
Fabian

Nonsense 27. Okt 2004 16:58

Re: 2 kreise sollen bei kontakt abprallen
 
@dizzy: Habe (leider) kein Physik mehr und deshalb steig' ich da gerade nicht hinter.
Wie kann denn die Länge vom Richtungsvektor die Geschwindigkeit festlegen? Mein Problem ist jetzt wohl, dass ich es rein mathematisch betrachte. Würde mich jetzt mal interessieren (der Rest ist soweit logisch).

dizzy 27. Okt 2004 18:00

Re: 2 kreise sollen bei kontakt abprallen
 
Wenn der Richtungsvektor die Verschiebung von Zeitpunkt A nach Zeitpunkt B darstellt, dann stellt seine Länge ein Maß für die Geschwindigkeit dar. Je länger dieser Vektor ist, desto weiter ist ist das Objekt vom vorigen Ort weg.

Nur ist die Einheit auf dem PC etwas anders, und nicht km/h o.ä., da (im trivialen Fall) die Entfernung in Pixeln gegeben ist, und die Zeiteinheit ist die Dauer von Zeitpunkt A bis Zeitpunkt B, die ja nicht notwendigerweise eine Stunde, oder eine Sekunde ist.
Also hat man nachher die Geschwindigkeit in px/i, mit px=Pixel; i=Messintervalllänge (z.B. wenn es per TTimer passiert, dann halt das Timerintevall).

Nonsense 27. Okt 2004 18:21

Re: 2 kreise sollen bei kontakt abprallen
 
Hmm, also wenn ich da richtig verstanden habe, ist es eigentlich egal, ob ich die Geschwindigkeit in einer "normalen" Variable speichere oder als Betrag des Richtungsvektors, richtig?

dizzy 27. Okt 2004 18:40

Re: 2 kreise sollen bei kontakt abprallen
 
Es kommt darauf an, wie du deine Bewegung letztendlich anstellst. Man könnte auch daher gehen und den Richtungsvektor immer gleich lang lassen, und die Geschwindigkeit darüber regeln, dass man z.B. am Timer schraubt.

Wenn du die Geschwindigkeit separat mitführst, macht das eigentlich nur zu Informationszwecken sinn, und die wäre ohnehin aus dem Richtungsvektor zu berechnen. Aber um diese Geschwindigkeitsangabe dann wirklich zu nutzen musst du deinen Richtungsvektor auf diesen Wert skalieren - und schon sind wir wieder am Anfang.

Ein kleines Bsp:

Es sei ein Punkt zum Zeitpunkt z0=0sec an den Koordinaten (3 / 3)
Zum Zeitpunkt z1=1sec sei er an den Koordinaten (6 / 7)

Die Verschiebung ist als Vektor folgendermaßen beschrieben: v = (3 / 4)
Die Länge von v ist sqrt(25) = 5.
Also ist der Punkt an z1 5 Einheiten von seiner Position an z0 entfernt.

dz sei die Zeitdifferenz zwischen z0 und z1. Somit hat der Punkt 5 Pixel Weg in der Zeitspanne dz zurückgelegt, also 5px/dz; wobei dz auch "Intervall" genannt werden kann ;).
In unserem Fall ist dz=1sec, also hat der Punkt 5px/s zurückgelegt.

Nonsense 27. Okt 2004 18:48

Re: 2 kreise sollen bei kontakt abprallen
 
Wie das ganze funzt, weiß ich ja. Wollte nur wissen, ob es da irgendeinen special Grund für gibt, warum das über den Richtungsvektor läuft.
Trotzdem: Frage beantwortet. :zwinker: Danke!

fiasko 27. Okt 2004 18:53

Re: 2 kreise sollen bei kontakt abprallen
 
Zitat:

Zitat von dizzy
@StefanDP: Dort ist aber auch nur der zentrale Stoß beschrieben. Der ist deutlich einfacher, aber reicht für eine brauchbare Billard-Simulation leider nicht.

Ähm, die Seite hat den gleichen Ansatz wie meiner - und wieso soll das für dezentrale Stöße nicht klappen (bzw. kann du mal einen dezentralen Stoß bei 2 Kreisen aufmalen) :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr.
Seite 2 von 4     12 34      

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