kollisionsberechnung..
Übersicht

da_pollerBetreff: kollisionsberechnung.. |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich habe eine linie von a nach b...
und einen punkt der sich im moment bei C befindet und im nächsten frame bei D somit hab ich 2 linien die ich überprüfen möchte ob diese sich schneiden.. alle bisherigen google treffer übersteigen mein wissen in mathematik hat jemand heir vielleicht eine hilfestellung? fertige codes weiß ich nciht ob sinnvoll sind weil ich die formel (die ich in google 100 mal gefudnen habe und wohl auch jeder verwenden wird) nicht verstehe :/ lg poller |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, aus den Punkten kannst du die Steigung m einer Linir berrechnen:
(y2-y1)/(x2-x1) = m. Das machst Du für beide Punktpaare (a-b) und (c-d) da y= mx+n die liniengleichung ist erfahren wir n, indem wir einen der Punkte einsetzen: y(a) = mx(a)+n Das lösen wir nun nach n auf: n=y(a)-mx(a) Auch das machen wir für beide Linien. Das sind dann zwei Liniengleichungen der Form y = mx+n, die Du gleichsetzen musst. m1x+n1 =m2x+n2 nun lösen wir nach x auf: m1x = m2x+n2 -n1 =>m1x-m2x= n2- n1 =>(m1-m2)x = n2-n1 x=(n2-n1)/(m1-m2) dieses x setzt du nun in eine der Liniengleichungen und erhälst y, und somit ist der Schnittpunkt das Koordinatenpaar (x|y). Bis auf einige wenige Sonderfälle (Geraden parallel, gerade ist parallel zu einer Achse) funktioniert das einwandfrei. |
||
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 |
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oke bis zum steigung berechnen bin ich gekommen ![]() zunächst mal danke für die ausführliche erklärung ich mach mir wohl nun nen kaffee und versuch das endlcih zu verstehen ![]() nebenbei noch eben 2 kleine fragen.. du hast eine variable "mx" woher erhalte ich deren wert? und was ist dann mx(a) <- woher kommt a und welchen wert erhält es? edit: meine implementierung sieht nun folgendermaßen aus: Code: [AUSKLAPPEN] m1=(end_y#-start_y#)/(end_x#-start_x#) m2=(p_ny#-p_y#)/(p_nx#-p_x#) n1=start_y#-m1*start_x# n2=p_y#-m2*p_x# x=(n2-n1)/(m1-m2) y=m1*x+n1 hab ich deine erklärung richtig umgesetzt? edit2: wertemäßig scheint alles zu passen nur was mache ich wenn es tatsächlich vorkommt das BEIDE oder auch nur eine linie parralell einander oder einer achse sind? <nicht selten dieser fall. lg poller |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also,mx ist wie du schon erkannt hast nicht eine Variable sondern zwei. Man verzeihe mir meine Schlamperei.
Die Berechnungen sind soweit ich das überblicke beim Überfliegen auch korrekt, was ja auch damit korreliert dass die Werte bei Dir passen. Zu den Sonderfällen: Wenn Du eine Achsparallele zur y-Achse hast lässt sich m nicht bestimmen, da der Bruch nicht definiert ist, bei einer X-Parallelen ist m = 0. Letzteres ist ja kein Problem, bei ersterem prüfst Du einfach ob die beiden x-Werte der Punkte identisch sind. ist das der Fall ist die Schnittkoordinate an = gleich den X-Werten der Punkte. Dieses X setzt Du in die Gleichung der 2en Geraden und Du hast deinen Schnittpunkt. (Sonderfall: beide sind parallel zu y - bei diesem Fall ist es entweder die selbe Parallele oder aber kein Schnittpunkt liegt vor). Wenn Du für beide eine Steigung m ermitteln konntest und die identisch ist schneiden sich die Exemplare nicht, da sie parallel sind (oder aber sie sind eine identische Gerade). Damit sollte soweit alles abgedeckt sein. In jedem anderen Fall schneiden sich die Geraden irgendwo, du musst nur noch prüfen ob der Schnittpunkt innerhalb deiner Geraden liegt, was ja auch kein Problem ist weil du ja Anfangs- und Endkoordinate kennst. Viel Erfolg. |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group