Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-01-2006, 12:36   #1 (permalink)
access denied
 
Benutzerbild von Gurth
 
Registriert seit: Jan 2006
Ort: Düsseldorf
Beiträge: 86
Unhappy Collision Detection von zwei Kreisen

Hallo!

Ich lese grad das Buch "Flash MX Game Design Demystified", was sicher viele von euch kennen. Eine Erklärung, die mir leider sehr wichtig erscheint, verstehe ich allerdings überhaupt nicht!

Es geht dort um die im Voraus berechnete collision detection von zwei Kreisen, unabhängig von der Framerate. Und zwar werden da erst die Gleichungen für die Position der beiden Kreise aufgestellt:

x1 = xl1 + xmov1 * t
y1 = yl1 + ymov1 * t

und

x2 = xl2 + xmov2 * t
y2 = yl2 + ymov2 * t

wobei jeweils xl1, yl1, xl2 und yl2 die letzte (daher l) Position des Kreises am Ende des letzten Frames sein soll. Die mov ist die verschiebung (vorher definiert) und t sind die Frames.

Soweit komme ich mit.

Dann folgt die Gleichung: Entfernung der beiden Kreise ist nach Pythagoras

distance = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));

und gesucht ist schließlich der Punkt, an dem die Entfernung = der Summe der Raadii der Kreise ist, also r1 + r2, und R soll nun r1+r2 sein. Jetzt werden R und die Entfernungsgleichnung gleichgesetzt. Daraus entsteht:

R = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)) quadriert wird

R*R = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)

Jetzt wird ausmultipliziert: (ich schreibe mal ich in AS-Schreibweise weiter):

R² = x2²-2x1x2+x1² + (y2²-2y1y2+y1²)
= x1² + x2² - 2x1x2 + y1² - y2²

Soweit kann ich auch noch folgen. Jetzt werden die vier ursprünglichen Gleichungen eingesetzt und man erhält

Für x1 = xl1² + xmov1²*t² + 2xl1*xmov1*t
Für x2 = xl2² + xmov2²*t² + 2xl2*xmov2*t
Für -2x1x2 = (-2xmov1*xmov2)*t²+(-2xl1*xmov2 -2xl2*xmov1)*t -2xl1*xl2

und so weiter.

Und jetzt hörts bei mir auf. Im Buch steht "solve for the time". Heißt das Ableiten oder Auflösen...? Auf jeden Fall werden dann eine ganze Reihe mysteriöser "Konstanten" definiert:

R = radius1+radius2
a = -2*xmov1*xmov2+xmov12+xmov22
b = -2*xl1*xmov2-2*xl2*xmov1+2*xl1*xmov1+2*xl2*xmov2
c = -2*xl1*xl2+xl12+xl22
d = -2*ymov1*ymov2+ymov12+ymov22
e = -2*yl1*ymov2-2*yl2*ymov1+2*yl1*ymov1+2*yl2*ymov2
f = -2*yl1*yl2+yl12+yl22
g = a+d
h = b+e
k = c+f-R2

und es entsteht auf wundersame Weise folgende Gleichung:

g*t2+h*t+k = 0

Und ich habe ABSOLUT keine Ahnung, wie der Autor darauf kommt, obwohl ich weder in Mathe noch in Physik schlecht bin


Falls jemand von Euch diese Sache durchschaut, wäre es toll, wenn er/sie es mir erklären könnte!

Oder kennt jemand einen einfacheren Weg, das Gleiche zu erreichen?

Ich kann auch mal das gesamte ActionScript aus dem Buch posten, wenns hilft.

In verzweifelter Hoffnung auf Hilfe...
Gurth
Gurth ist offline   Mit Zitat antworten
Alt 26-01-2006, 12:44   #2 (permalink)
Custom Title
 
Registriert seit: Aug 2001
Beiträge: 467
Na da hab ich doch was für Dich:
Pool Hall Lessons auf Gamasutra
__________________
---::::: AVisioN :::::---
AVisioN ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele