Kollision 2er Kreise Üperprüfung wird wahr , aber es fehlen 2 px

FipsTheThief

Erfahrenes Mitglied
Das ist so ein kleines konzeptionelles Problem.

Zu meinen Ziel ich möchte gern einfach mal anfangen mit ein wenig Spiele Programmierung und dabei 2 Kreise durch den Raum jagen und beide miteinander kollidieren lassen. Also relativ weit unten anfangen.

Inzwischen bin ich an den Punkt angekommen wo ich genau sagen kann , ja beide Kreise werden gleich kollidieren.

Angenommen Mk1 ( mittelpunkt kugel 1) = [ 142, 84] bewegt sich mit der Geschwindigkeit von 5 und einer Richtung von 0 ( also genau auf y) , Mk2 = [ 158, 92] Geschwindigkeit von -5 und ebenfalls Richtung 0.

Sozusagen recht trivial, sie bewegen genau aufeinander zu, aber haben unterschiedliche Y positionen. So das sie nicht einfach frontal aufeinander knallen werden sondern das nach der Kollision der beiden Kugeln eine Richtungs Änderung vorliegen wird.

Nach einer Bewegung sind sie nun schon kurz davor zusammen zu knallen.

| Vektor ( Mk1 - Mk2) | ergibt bei mir nun 17.88 px , da beide Kugeln einen Radius von 8 haben liegt noch keine Kollision vor aber es fehlen nun nur noch 1.88px.
Und hier bin ich schon bei meinen Problem, es gibt nunmal keine 1.88px Selbst wenn ich das durch 2 teilen würde käme ich auf 0.94 px die sich jede Kugel durch ihre gleiche Geschwindikeit noch bewegen dürften eh es raucht.

Also würde im nächsten Schritt festgestellt werden , Kollision und nun bewegen sich beide auseinander. Aber 2 px Abstand zueinander sieht man dann halt doch und das sieht noch etwas unfein aus.
Wie würdet ihr sowas lösen , die Kugeln einfach mal im nächsten Schritt zu zueinander stellen das sie genau Kollidieren wäre eines und dann die Richtungen im 3. Schritt wechseln.

Oder die Richtungen gleich im 2. Schritt wechseln.

MfG
 
Richtung von 0 ( also genau auf y)
Sicher, dass du nicht auf x meinst? Ich geh mal von beiden Fällen aus, allgemein ist jedoch zu sagen, dass du selbst darauf hingedeudet hast, dass sich diese nicht frontal aufeinander zu bewegen, daher solltest du dir den Fall eventuell einmal aufmalen...

Bewegen sich in y-Richtung: Beide Kugeln würden sich bei 80% (d.h. 4 Pixel Bewegung beider Kreise) deiner Zeiteinheit tangieren. Sie liegen direkt nebeneinander.

Bewegen sich in x-Richtung: Beide Kugeln haben bei 20% (d.h. 1 Pixel Bewegung beider Kreise) deiner Zeiteinheit noch 0.1245 Pixel Abstand, was vermutlich zu vernachlässigen wäre.

Ich würde dir also raten deine Intervalle zu verkleinern, sodass du jeden Pixel, welche sich die Kreise selbst bewegen, darstellen kannst.
 
Zuletzt bearbeitet:
Ja sorry natürlich die X Achse :) In der Y Achse verschieben sie sich noch gar nicht. Ich hab das dann einfach so gelöst da ich ja schon den Schritt vor der eigentlichen Bewegung auf eine Kollision hin überprüfe.

Durch die gleiche Geschwindigkeit der Kugeln einfach (aktueller Abstand - 2 * Radius) / 2 nehme und das bei beiden auf der X Achse hinzuaddiere. Y war noch zu vernachlässigen da änderte sich ja momentan gar nichts.
Weiterhin hab ich dann aber noch gelesen das ich die eigentliche Richtung gleich in Winkeln nehmen sollte. Dies macht es dann nach der Kollision leichter zu entscheiden wohin die Dinger nun rollen werden.

Deine Vorschläge werde ich auf jeden Fall einmal ausprobieren sobald ich wieder dazu komme , momentan muss ich mich wieder mehr um die beruflichen Angelegenheiten kümmern da spielt das leider keine sehr große Rolle.

Und Intervalle verkleinern ja , naja da ich das in JavaScript umsetze ist das mit so kleinen Intervallen von 1px immer nen bissel schwierig ;), soll so die Vorbereitung auf HTML 5 und Canvas werden zusammen mit WebGL.
 
Hi Ho,
Also ich denke man sollte vielleicht die gemalte Angelegenheit unabhängig der berechneten Angelegenheit sehen.
Das soll heißen , Du hast einerseits ein ogisches Koordinatensystem und ein physisches koordinatensystem (Bildschirm) auf welches Du umrechnest (dreisatz). Auf diese Weise könntest Du nicht nur den Abstand der Durch Rundungsproblematiken entsteht ausgleichen, sondern auch auf verschiedene Auflösungen hin Deine Kugeln bzw. Kugelbewegungen darstellen (ein ZOOM sozusagen)

Viel Spaß

Takidoso
 
Hallo,

takidoso hat recht. Es ist besser wenn du das Mathematische von der Ansicht trennst. D.h. Deine Berechnungen sollten so genau wie möglich sein und sich nicht um die Ansicht kümmern. Die Ansicht kann dann kleine Ungenauheiten ruhig vertragen, du kommst eh nicht drum herum. Wenn die Mathematik dahinter stimmt, mittelt sich auch der Anzeigefehler in der Summe.
Zur Berechnung würde ich übrigens Vektorrechnung statt Winkel empfehlen.
Gruß
 
Vielen Dank erst einmal für die ganzen Tipps ich werde mich darüber mal schlau machen gibt ja doch recht viele Foreneinträge zu dem Thema.
Bisher habe ich auch nur Vektor Rechnung benutzt , das sie kollidieren wird schon soweit gut berechnet der nächste Schritt war nun gewesen wenn sie kollidiert sind in welche Richtung fliegen sie.
Wenn ich die Tangente nehme welche durch den Punk führt wo sich beide Kreise treffen und selbiges einfach mal als Wand definiere, recht einfach die Austrittswinkel und somit die neue Richtung bestimmen.

Aber ich denk ich werd noch einmal weiter vorne Anfangen später wenn es die Zeit wieder zulässt und eure Tipps mal berücksichtigen und mich weiter ausprobieren. Wird alles in allem doch ein wenig komplexer als ich von Anfang an dachte , aber schadet ja nicht sich auch in dem Bereich einmal weiter zu bilden :)

Viele Grüße
 
Der gesuchte Austrittswinkel ist ja die Reflexion der Bewegungsrichtung der Kugel auf die Ebene (deren Normale die Gerade der zwei Mittelpunkte der beiden Kugeln ist) des Kollisionspunktes mit der Zweiten Kugel.
Die Reflexion kannst du wie hier beschrieben recht einfach mittels Vektorrechnung berechnen:
http://wiki.delphigl.com/index.php/Reflexion

Gruß
 
Zurück