Physik 2 Kreise

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

TimBo

Betreff: Physik 2 Kreise

BeitragSo, Nov 23, 2008 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi ,

ich versuche ein Spiel zu Programmieren, das ähnlich wie Billiard ist.
Der Unterschied jedoch ist, dass ein Kreis fest an die Maus fixiert ist.

Wenn der Kreis der Maus auf einen anderen Kreis trifft, dann soll er sich möglichst realistisch bewegen.

Wie rechne ich den Speed des zu interagierenden Kreises aus ?


Hier mal ne Skizze:
user posted image

Die Richtung müsste ja die Gerade sein, auf der M1 und M2 liegt, aber wie rechnet man den Speed aus ?

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Nov 24, 2008 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Speed ist:

Speed# = MausVektorGeschwindigkeit * Cos ( MausBewegungsVektor - DeinAlphaWinkel )

Allerdings wirst du so einfach nicht DeinAlphaWinkel heraus finden können, da die Mausabfrage als auch die Bildschirmwiederholfrequenz nun mal endlich sind. Soll heissen: Du wirst nicht drum herum kommen, den Kollisionspunkt anhand der beiden Relativgeschwindigkeiten zu ''normalisieren''. Also auf den Abstand beider Radien zu bringen um dann erst den AlphaWinkel ausrechnen zu können.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

BladeRunner

Moderator

BeitragMo, Nov 24, 2008 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Die Richtung müsste ja die Gerade sein, auf der M1 und M2 liegt, aber wie rechnet man den Speed aus ?

So wie ich das Bild sehe, nein.
Du hast 2 Vektoren, einmal den des Pucks, dann den des Schlägers. Bei einer Kollision addieren ich die beiden, und somit sollte die Resultierende nach oben rechts weg gehen, nicht nach oben links.
(Natürlich kannst du die Spiegeln, da der Schläger ja seine richtung nicht verändern soll, aber ob das so korrekt ist sei mal dahingestellt)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

TimBo

BeitragMo, Nov 24, 2008 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

danke für eure Antworten Smile
werde mal mit einer bekannten Suchmaschine googlen, was vektorgeschwindigkeiten sind o.O

@ Hectic: was meinst du mit Normalisieren ? ich habe das so gemacht:
If abstand<=radius then ..
meinst du das ?

@ BladeRunner: ich habe in den letzten Tagen, während ich nach Physikalischen gleichmäßigkeiten
herumexperimentiert habe immer 2 Geldstücke aufeinander prallen lassen, aus langeweile.
Da ist mir irgendwann aufgefallen, dass der Winkel so sein könnte. Da habe ich weitere male das
Experiment ausgeübt und ich konnte nie widerlegen, dass es so nicht stimm. Bei mir prallt
der Puck immer nach oben links.
Hast du vll. eine Formel, die den Winkel aussrechnet ?

Viele Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Nov 24, 2008 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja eben, deine Abfrage If Abstand<=(RadiusMaus+RadiusPuck) Then ... ist das Problem. Nehmen wir mal dein Beispielbild da oben. Wenn ich nun die Maus sehr schnell nach oben bewege und in dem Beispielbild grad noch keine Kollision statt findet dafür aber im nächsten Frame die Maus 40 Pixel weiter ist, dann wäre die Aufschlagrichtung eine ganz andere. Aus diesem Grund sollte man dann beide Objekte anhand ihrer Bewegungsvektoren in ihrer jeweiligen Geschwindigkeit so weit nach hinten ziehen, bis eine Kollision genau auf dem Abstand von (RadiusMaus+RadiusPuck) gebracht wird. Das meinte ich mit ''normalisieren''. Ein anderes Wort ist mir dafür nicht eingefallen.

Außerdem kann es passieren, wenn man die Maus sehr schnell bewegt, dass eine Kollision einfach überflogen wird. Eventuell sollte man da nach Linienkollisionen die Linienbreiten berücksichtigen suchen. Es gibt da sicherlich auch bessere Lösungswege als mit If Abstand zu arbeiten.

Edit1: Deine Geldstücke berücksichtigen aber keine Relativgeschwindigkeit, da das getroffene ja immer auf der Tischplatte still stand. Bewegen sich aber beide Geldstücke so wie in deiner Zeichnung angegeben, dann ist die Beschreibung von BladeRunner richtig.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xeres

Moderator

BeitragMo, Nov 24, 2008 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du den Kreisen/Kugeln noch eine Masse zuordnest, errechnest du die Geschwindigkeit über den Elastischen Stoß - die Animation 2-dimensionaler elastischer Stoß veranschaulicht hübsch die Vektorpfeile.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group