Kugelkollision
Übersicht

![]() |
CtuchikBetreff: Kugelkollision |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich hab versucht eine Art Billardkugel-Simulation zu schreiben, jetzt hab ich mehrere Probleme, von denen ich eins an euch stellen will, nämlich: Mein Kugeln haben eine Geschwindigkeit v und einen Winkel und bewegen sich so: Code: [AUSKLAPPEN] k\x# = k\x# + Cos(k\angle%) * k\v# k\y# = k\y# + Sin(k\angle%) * k\v# Frage: Wie bringe ich die Kugeln dazu anzuhalten, wenn sie kollidieren? Also, dass sie genau den Kollisionsabstand haben und nicht übereinander liegen. Am besten sollten beide Kugeln abhängig von ihrer Geschwindigkeit wieder soweit zurückverschoben werden, bis sie nicht mehr überlappen, allerdings wäre eine While-Schleife rechenaufwändig und nciht sehr elegant und ich finde keine Möglichkeit die Punkte auszurechnen! Weiss jemand Rat? mfG Ctuchik |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
wenn sie kolliert sind und du das regelmäßig kontrollierst, dann müssen sie doch nur einmal (speed) zurückgesetzt werden ...
MfG |
||
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann können sie aber je nach Geschwindigkeit auch einen Abstand von bis zu 20 Pixeln voneinander haben und würden also schon aus dieser Entfernung abprallen!
Ich wollte eigentlich ne bessere Lösung finden, wenns keine gibt, dann mach ich das halt so! |
||
![]() |
Blatolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oder du machst, dass die Kugel bei Kollision per for next Schleife mit deiner Bewegungsformel aber halt in die entgegengesetzte Richtung mit der GEschwindigkeit 1 bewegt wird bis keine Kolli mehr besteht.
Mag zwar recht Rechenaufwendig sein, aber erzielt das beste Ergebnis. Oder du machst die bewegung immer nur in 1 Pixelschritten. Sowas hatte ich mal gemacht, damit auch kleinere Objekte bei hoher Geschwindigkeit kollidieren können und nicht übereinander hinfegfliegen. Vielleicht gibt es auch noch eine Lösung indem man den Radius einbezieht. Den Ball damit genau außen hinzukriegen dürfte nicht das Problem sein, aber wie soll man herausfinden wo der Ball am Rand sein muss? |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Am besten ist es wenn du die Geschwindigkeit aufteilst z.B.
das 1 cm/s 10 mal getestet wird , also asynchron zur Darstellung . |
||
c64 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nimm doch deine Kugeln als Image (wenn nicht schon an dem ist) ,, und lass sie per 'ImagesCollide' abfragen wenn das in deinem Fall möglich ist , dann hast du Pixelgenaue
kollision !! ,, |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi,
bei Superball habe ich doch so eine Abfrage drin ! Toni |
||
![]() |
EPS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
lade dir mal das hier runter, ich denke das ist genau was du suchst. Ich selbst hab nämlich auch gerade eine solche Routine gesucht und dieses Beispiel hier im englischen Code Archiv gefunden. Ist ne komplette, einfache Billard Routine. http://www.blitzbasic.com/code..._bb/415.bb |
||
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
thx, genau sowas wollt ich machen ![]() Allerdings wird bei diesem Beispiel das Problem das ich hier als Frage gestellt hab, nicht korrekt gelöst und die Kugel würde (bei hoher Geschwindigkeit) falsch abprallen! Die Kugeln werden nämlich entlang der Kollisionsrichtung auseinander bewegt, was aber nciht unbedingt die Richtung ist aus der sie gekommen sind! Die Kollision gefällt mir aber gut, ich hab damit nämlich momentan auch Probleme und komm nciht ganz dahinter, wie Kraft und Winkel in dem Beispiel berechnet werden ![]() Naja, vielleicht lass ichs auch besser sein! Ich wollte das ja sowieso nur machen um zu sehen, ob ich in Physik was gepeilt hab ![]() mfG Ctuchik |
||
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du kannst es ja auch so machen, das du ein sichbares kugelimages zeichnest und ein image, was du mit maskimage unsichtbar machst(bisschen größer als die kugel) um dann zu überprüfen, ob das mit mask image unsichtbar gemachte bild mit dem anderen überlappt! naja also das wird wahrscheinlich nur bei einem rechteck gehen, da bb keine von haus aus unsichtbaren bilder unterstützt... | ||
Erare humanum est - Irren ist Menschlich |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group