ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 말랑말랑 만들기
    알고리즘 2008.10.24 11:49

    붙으면 찌그러지는 '말랑말랑'
    아~~ 완벽하지 않다.
    업데이트 해야겠다 ㅠㅠ

     


    계산방법

    반지름이 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);

    이로써, 두 공의 위치와 반지름을 알면 찌그러뜨릴 수 있다.ㅎ


    근데 여러개의 공을 계산하면 계산량의 부담이 있다.
    완벽하지 않지만 이상 말랑말랑 하게 하는 방법.

    댓글 0

Designed by Tistory.