Kugelkollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Ctuchik

Betreff: Kugelkollision

BeitragMi, März 10, 2004 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

D2006

Administrator

BeitragMi, März 10, 2004 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn sie kolliert sind und du das regelmäßig kontrollierst, dann müssen sie doch nur einmal (speed) zurückgesetzt werden ...

MfG

Ctuchik

BeitragMi, März 10, 2004 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 11, 2004 7:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 11, 2004 13:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten ist es wenn du die Geschwindigkeit aufteilst z.B.
das 1 cm/s 10 mal getestet wird , also asynchron zur Darstellung .
 

c64

BeitragDo, März 11, 2004 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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-BIT

Gast

BeitragDo, März 11, 2004 17:00
Antworten mit Zitat
Hi,

bei Superball habe ich doch so eine Abfrage drin !


Toni

EPS

BeitragDo, März 11, 2004 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 14, 2004 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
thx, genau sowas wollt ich machen Smile
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 Smile! Ich schaus mir nochmal an!

Naja, vielleicht lass ichs auch besser sein! Ich wollte das ja sowieso nur machen um zu sehen, ob ich in Physik was gepeilt hab Smile

mfG Ctuchik
 

dubitat

BeitragMi, März 17, 2004 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group