본문 바로가기

Study/Math/Science

움직이는 두 원의 충돌 시간 알아내기


두 원이 직선 운동 할때 정확한 충돌 시간을 찾는 코드
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개 중 하나는 이미 뚫고 지나간 후의 시간이기 때문에 그것은 생각하지 않고, 작은 것만을 생각합니다.