<-클릭
기존의 방식은 두 원간의 거리 차가 두 원의 반지름의 합보다 작으면, 충돌을 확인하는 방법이였다면, 이 방식은 두 원의 속도 벡터를 분석하여, 충돌이 일어날지의 여부를 미리 예측하고 그에 따른 적절한 대응을 해준것이다.
두 원을 각각 s0 , s1 이라고 하고, 두원의 시간(t)에 대한 위치를 p0 , p1 이라고 하자. (0<= t <= 1 )
p0(t) = C0 + V0*t
p1(t) = C1 + V1*t
로 쓸수 있다.
그럼 시간에 따른 두 원간의 거리를 d(t) 로 나타내어 보면
d(t) = p1(t) - p0(t) = (c1 - c0) + (v1 - v0)*t
즉, d의 length 가 두 원의 반지름의 합(r0 + r1) 보다 작으면 충돌이 일어나게 된다.
if (|d| <= r0 + r1 ) -> 충돌
Cost 를 절감하기 위해서(sqrt 함수 사용을 피하자, 이는 고비용을 요구한다.)
d.dot(d) = = r^2 일때의 t의 값을 구하면 충돌지점을 알아낼수 있다.
d = c + v*t 라고 하면,
c.dot(c) + 2*c.dot(v)*t + v.dot(v)*t^2 = r^2
이 방정식을 근의 공식을 사용해서 풀면 t를 구할수 있음..
즉, c0.add(v0 * t) 의 위치에서 충돌이 발생한다.
'프로그래밍 > Actionscript3.0' 카테고리의 다른 글
| Actionscript 3 , Isometric 과 PathFinding A*(astar) 알고리즘을 사용.. (0) | 2009/12/28 |
|---|---|
| Actionscript 3 원과 원 충돌 테스트 (0) | 2009/12/21 |
| Actionscript3 - TheFWA 따라한것.. (0) | 2009/11/25 |
| Actionscript3 - 원과 선의 충돌 테스트 (0) | 2009/11/23 |


