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 |
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 |
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! |
Re: 2 kreise sollen bei kontakt abprallen
Zitat:
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 |
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). |
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). |
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?
|
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. |
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! |
Re: 2 kreise sollen bei kontakt abprallen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 Uhr. |
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