붙으면 찌그러지는 '말랑말랑'
아~~ 완벽하지 않다.
계산방법
반지름이 rA인 회색공과 rB인 노란공이 만났을 때, 각 공의 외각을 이루는 점들 중 겹치는 부분에 위치한 점들은 점선상에 놓여야만 한다. 즉, 겹치는 부분의 반지름을 줄이는 방법이다.
그림을 참고로 삼각함수를 만들어보면,
cos(thetaA) = dA(A 에서 겹치는 중심까지 거리) / resizeAp(A의 줄어든 길이);
cos(thetaB) = dB(B 에서 겹치는 중심까지 거리) / resizeBp(B의 줄어든 길이);
resizeAp = dA / cos(thetaA);
resizeBp = dB / cos(thetaB);
한편,
dA = rA - (rA + rB - dAB(공 AB 중심점의 거리))/2;
dB = rB - (rA + rB - dAB(공 AB 중심점의 거리))/2;
이고,
thetaA 는
(공 A의 외각점 pA가 절대 좌표상 이루는 각) - (공 A 입장에서 공 B의 위치가 이루는 각) 이다.
thetaA = atan2(pA.y - A.y, pA.x - A.x) - atan2(B.y - A.y, B.x - A.x);
thetaB = atan2(pB.y - B.y, pB.x - B.x) - atna2(A.y - B.y, A.x - B.x);
이로써, 두 공의 위치와 반지름을 알면 찌그러뜨릴 수 있다.ㅎ
근데 여러개의 공을 계산하면 계산량의 부담이 있다.
완벽하지 않지만 이상 말랑말랑 하게 하는 방법.





