원의 점에서 이동 방향에 접하는 선을 그리도록 선택했기 때문에 그림이 약간 오도 된 것 같습니다. 원의 상단 및 왼쪽 지점이 가장자리에 닿으면 그리드 가장자리와 충돌하는 것을 알 수 있습니다.
하자 C는 귀하의 중심과 r에 반경 그래서 P ' = C + ( R , 0)과 P " = C + (0, r)을.
경우 D는 당신의 방향 벡터합니다 (versor) 인 두 개의 라인을 가지고 :
R '= D · t + P' ,
R "= D · t + P"
방정식의 선과 그 선의 교차점을 간단히 찾아야합니다.
y = i 와 y = i 는 격자의 가장자리입니다!
이 솔루션은 당신은 발견 할 것이다. 당신은 단순히 X 또는 R의 y 구성 요소 '및 R "을 고려해야하기 때문에 쉽게 t 각 insersection에 대한의 값을, 그리고 thoose의 포인트 t 에 의해 S, 단순히 일종의 그 시점 t 과 끝났습니다.
교차점을 알고 있으면 어떤 셀이 충돌했는지 쉽게 알 수 있다고 생각합니다.
r <1 (셀 너비 및 높이) 인 경우 작동합니다 .
다른 경우에도 간단하게 P ' 와 P " 에 대해 약간의 고려를 합니다. 우리는 방향으로 인해 TOP과 LEFT를 선택합니다. BOTTOM과 RIGHT는 반대 방향으로 고려해야합니다. 이유를 이해해야합니다.
이제이 이미지를보십시오 :
원은 단일 셀보다 크며 그림과 같은 방향으로 가고 있다고 가정합니다. P1은 첫 번째 접촉 지점이고, P2는 두 번째 지점이며, P3은 아래쪽 절반에 있으므로 쓸모가 없습니다. 당신이해야 할 일은 앞에서 본 것처럼 P1과 P2에서 광선을 캐스팅하고 수직선에 대해서도 동일하게 수행하는 것입니다.
일반적으로 광선을 쏘는 곳, 원이 클수록 던질 광선이 많을 때 TOP 및 LEFT와 함께 다른 출발점이 있습니다.
솔직히 말해서 어떤 기하학적 고려를하는 모든 광선을 피하는 것은 피할 수 있지만, 이해하기 어렵게 만들 수 있습니다.