Een botsing tussen twee cirkels detecteren, is niet zo eenvoudig. Het vraagt een goede basis van Wiskunde. Even diep ademhalen… daar gaan we.
Doel
We berekenen of er een botsing zal optreden tussen twee cirkels, na een bepaalde tijd, in memory. Daarvoor hebben we nodig:
- de plaats van de cirkels: x1, y1, x2, y2
- de snelheid waarmee ze bewegen: x1Mov, y1Mov, x2Mov, y2Mov
- de tijd waarnaar we rekenen: t
Wanneer is er een botsing?
Twee cirkels botsen als de som van hun stralen kleiner of gelijk is aan de afstand tussen de cirkels.
We berekenen
snelheid = afstand / tijd
afstand = snelheid * tijd
x1 = xo1 + x1Mov * t -> xo1 is de oude x1
y1 = yo1 + y1Mov * t
x2 = xo2 + x2Mov * t
y2 = yo2 + y2Mov * t
afstand = Math.sqrt((x1 – x2)² + (y1 – y2)²) -> Pythagoras
afstand = R1 + R2 = d -> zie tekening
d² = (x1 – x2)² + (y1 – y2)²
d² = x1² – 2*x1*x2 + x2² + y1² – 2*y1*y2 + y2²
De afstand berekenen na een bepaalde tijd
x1² = ( xo1 + x1Mov * t)²
x1² = xo1² + 2*xo1*x1Mov * t + x1Mov²*t²
-2*x1*x2 = -2*(xo1 + x1Mov * t)*(xo2 + x2Mov * t)
-2*x1*x2 = -2*(xo1*xo2 + xo1*x2Mov*t + x1Mov*t*xo2 + x1Mov*x2Mov*t²)
-2*x1*x2 = (-2* x1Mov*x2Mov)*t² + (-2*xo1*x2Mov -2*xo2* x1Mov) *t – 2*xo1*xo2
x2² = ( xo2 + x2Mov * t)²
x2² = xo2² + 2*xo2*x2Mov * t + x2Mov²*t²
y1² = ( yo1 + y1Mov * t)²
y1² = yo1² + 2*yo1*y1Mov * t + y1Mov²*t²
-2*y1*y2 = -2*(yo1 + y1Mov * t)*(yo2 + y2Mov * t)
-2*y1*y2 = -2*(yo1*yo2 + yo1*y2Mov*t + y1Mov*t*yo2 + y1Mov*y2Mov*t²)
-2*y1*y2 = (-2* y1Mov*y2Mov)*t² + (-2*yo1*y2Mov -2*yo2* y1Mov) *t – 2*yo1*yo2
y2² = ( yo2 + y2Mov * t)²
y2² = yo2² + 2*yo2*y2Mov * t + y2Mov²*t²
We vereenvoudigen door constanten in te voegen
Om tot een kwadratische functie te komen, voegen we de factoren van t² en t, samen.
Voor x
ax = x1Mov² -2* x1Mov*x2Mov + x2Mov² -> t²
bx = 2*xo1*x1Mov -2*xo1*x2Mov -2*xo2* x1Mov + 2*xo2*x2Mov -> t
cx = xo1² – 2*xo1*xo2 + xo2² -> geen t
Voor y
ay = y1Mov² -2* y1Mov*y2Mov + y2Mov² -> t²
by = 2*yo1*y1Mov -2*yo1*y2Mov -2*yo2* y1Mov + 2*yo2*y2Mov -> t
cy = yo1² – 2*yo1*yo2 + yo2² -> geen t
x en y samentellen
a = ax + ay
b = bx + by
c = cx + cy – d² (zie hoger)
Alles samenvoegen
a*t² + b*t + c = 0
Berekenen van de tijd
Met deze kwadratische vergelijking kunnen we de tijd berekenen, nadat een bepaalde afstand is afgelegd.
t = -b +/- Math.sqrt(b² – 4ac)/2a
Dit levert 2 oplossingen op. Inderdaad, als twee cirkels naar elkaar toe bewegen, zullen ze exact 2 maal raken: als ze elkaar tegenkomen en als ze elkaar verlaten.

в конце концов: отлично..
Door:секс знакомства геев opdecember 18, 2009
op9:10 am