선분과 원의 충돌 검사를 하기 위해선 먼저 직선과 원의 충돌 검사를 한 후 충돌지점이 선분의 영역에 포함되는지 검사해야 한다. 따라서 먼저 직선과 원의 충돌 검사를 해보자. 직선과 원의 충돌 지점은 직선의 방정식과 원의 방정식의 해를 푸는 것이겠다.


선(A, B)의 방정식


원(C, r)의 방정식


해를 구하기 위해서 먼저 원의 방정식을 풀어 보자.


그 다음에 선의 방정식을 X에 대입한다.


이 방정식을 만족시키는 t가 있으면 직선과 원이 충돌하는 것이고, 그 t를 직선의 방정식에 대입해 정확한 충돌 지점까지 구할 수 있다. 그럼 위 공식을 t에 대해 정리해보자.

정리하고 보니 2차 방정식이다. 근의 공식을 이용해 t를 구해보자.

에서



근의 공식에서  

< 0 이면 해가 없고,

= 0 이면 해가 1개(접선),

> 0 이면 해가 2개이므로

이를 이용해 직선과의 충돌여부를 알 수 있다.


t에 관하여 나타낸 방정식에서

이므로 해가 있는 경우에 한해서 t를 구할 수 있다.

이 t를 직선의 방정식에 대입시키면 해이자 충돌지점인 X도 구할 수 있다.


직선-원 충돌이 아닌 선분-원 충돌이다.

하지만 t까지 이미 구했으므로 다 한 것이나 다름 없다.

t가 선분의 영역에 포함되는지만 확인하면 된다.


다시 직선의 방정식을 보면


이 중 선분의 영역은


따라서 구한 t(최대 2개)중 하나라도 이면 선분(A,B)와 원(C,r)이 충돌한 것이다.

  1. VoidCat 2013.11.28 22:01

    공식을 t에 대해서 정리하는 과정에서
    A^2과 -2AC가 증발해버렸내요.
    따라서 c = (A-C)^2 -r^2 이 됩니다.

    • hanstar17 2013.11.29 13:51 신고

      수정하였습니다.

      꼼꼼히 읽어보시고 틀린 부분을 넘어가지 않고 지적해 주셔서 고맙습니다!ㅋ

Definition

\[ P\cdot Q = \sum_{i=1}^{n} P_i Q_i \]

Theorem 1.

\(\alpha\)가 두 벡터 \(P, Q\) 사이의 각을 나타낼 때, \[ P \cdot Q = \| P \| \| Q \| \cos \alpha \]

proof.

dot product의 의미를 알지 못하기 때문에 먼저 그림을 그려 정의가 가진 의미를 찾아보자.


그려보니 cos을 유도할 수 있는 방법이 생겼다.

\( |P-Q| = \sqrt{\sum_{i=1}^{n} (Pi-Qi)^2} \)

루트를 제거하기 위해 양 변을 제곱하면,

\( |P-Q|^2 = \sum_{i=1}^{n} (Pi-Qi)^2 \)

   \( = \sum{Pi^2} + \sum{Qi^2} - 2\sum{Pi Qi} \)

dot product의 정의에 의해,

   \( = \sum{Pi^2} + \sum{Qi^2} - 2P \cdot Q \)

\( |P-Q|^2 = |P|^2 + |Q|^2 - 2P \cdot Q \) ..........................................(1.1)

피타고라스의 정리에 의해,

\( |P-Q|^2 = (|Q|-|P|\cos\alpha)^2 + (|P|\sin\alpha)^2 \)

   \( = |Q|^2 + |P|^2\cos^2\alpha - 2|P||Q|\cos\alpha + |P|^2\sin^2\alpha \)

   \( = |Q|^2 + |P|^2(\cos^2\alpha + \sin^2\alpha) - 2|P||Q|\cos\alpha \)

   \( = |Q|^2 + |P|^2 - 2|P||Q|\cos\alpha \)

\( |P-Q|^2 = |Q|^2 + |P|^2 - 2|P||Q|\cos\alpha \)....................................(1.2)

(1.1)과 (1.2)에 의해,

\( |P|^2 + |Q|^2 - 2P \cdot Q = |Q|^2 + |P|^2 - 2|P||Q|\cos\alpha \)

\( -2P \cdot Q = - 2|P||Q|\cos\alpha \)

\( P \cdot Q = |P||Q|\cos\alpha \) ..................................................... ( proved )

Math Jax를 처음으로 사용하여 글을 써본다. 시간이 정말 오래 걸리는데, 확실히 깔끔하게 정리된다. 익숙해지면 빨라질까?

  1. 2013.06.29 15:08

    비밀댓글입니다

    • hanstar17 2013.06.29 19:46 신고

      도움이 된다니 기분이 좋네요. 글을 작성한 보람이 있는걸요?

      물론 괜찮으니 소장하세요.^^