구의 중심
  c = (x_c , y_c)

광원
  p = (x_p, y_p)

광원 방향
  u = (x_u, y_u)

임의의 값
  t

구의 중심, 광원은 포인트, 즉 점이고

광원 방향은 벡터다.

그리고 t는 그냥 상수지.


여기서 알아야할 것이
벡터  = 포인트 - 포인트
포인트 = 포인트 + 벡터
벡터  = 상수 * 벡터

이런 관계가 있다.

그리고 벡터의 길이를 절대값기호를 써서 |벡터|라고 표현한다.

그럼 아까 니가 올린 식을 다시 쓰면

  | p + t*u - c | - r = 0
               이다

아까 말했다시피 포인트 + 벡터(p + t*u)는 포인트이고 포인트 - 포인트 ((p + t*u) - c)는 벡터다.
그리고 저 벡터는 구의 중심(c)에서 광선의 특정 지점(p + t*u)까지 그은 벡터이지.

광선의 특정 지점이 구 위에 있을려면 저 벡터의 길이가 r이 되어야겠지?

따라서 저 벡터(x_p + t*x_u - x_c, y_p + t*y_u - y_c)의 크기가 r이 되어야겠지

그런데 x_p, x_u, x_c, y_p, y_u, y_c는 앞에서 정해진 상수지?

따라서 r을 이항한 다음 제곱하면 A*t^2 + B*t + C = r^2 형태로 정리될 수 있어.


그러면 2차 방정식의 해 t0와 t1이 나오겠지?

그럼 이 두 값이 광선이 구의 표면과 만나기 위한 조건을 만족하게 하니까
(x_p + t0*x_u, y_p + t0*y_u)와 (x_p + t1*x_u, y_p + t1*y_u)이 광선과 구가 만나는 점이 되겠지.

두 점이 같으면 광선과 구가 접하는 것이고 말이지.

이해 안되는 부분 있으면 덧글 달어