두 원이 직선 운동 할때 정확한 충돌 시간을 찾는 코드
Find collision time between two circles with linear motion
3차원에서도 비슷하게 할 수 있음.
아래는 코드
var q:Number=a.x-b.x;
var v:Number=a.vx-b.vx;
var a:Number=a.vy-b.vy;
var c:Number=a.y-b.y;
var b:Number=q*v+a*c;
a=a*a+v*v;
if(a==0){
return 2;
}
v=a.r+b.r;
v=b*b-a*(q*q+c*c-v*v);
if(v<=0){
return 2
}
q=(-b-Math.sqrt(v))/a
if(0<=q && q<=1){
return q;
}
return 2;
원리는 두 원의 거리가 반지름이 합이 되는 시간을 계산합니다.
상대속도를 계산한 뒤 거리 공식을 써서 2차방정식을 풀어낸 다음 0초~1초 안에 충돌했는가를 검사하고, 아닐 경우 2를 리턴합니다. 근의 2개 중 하나는 이미 뚫고 지나간 후의 시간이기 때문에 그것은 생각하지 않고, 작은 것만을 생각합니다.
'Study > Math/Science' 카테고리의 다른 글
움직이는 선분과 점의 충돌 시간 알아내기 (직선 운동 가정) (0) | 2014.09.11 |
---|---|
삼각형의 오심 좌표 구하기 (1) | 2014.01.17 |