임의의 점에서 원추면까지의 최단 거리를 찾는 방법

2294 단어 수학

소개



"한 점에서 원추면까지의 최단 거리를 구하는 방법"을 검색해도 특별히 정리되지 않은 것 같기 때문에 해법을 정리했습니다.
일단, 수학적인 해법만 싣습니다만, 모처럼 Qiita에 주기 때문에 나중에 Python 혹은 C++에서의 프로그램 예도 쓰려고 합니다.

문제



다음 원뿔을 사용하여 생각합니다.
임의점 A(X, Y, Z)로부터 원뿔 표면까지의 최단 거리를 구해 갑니다.
원뿔의 중심축과 모선이 이루는 각도는 φ입니다.


Step 1



먼저 점 A와 원뿔의 중심 O를 통과하는 평면에서 원뿔을 자릅니다. 이 평면을 A-A '라고합니다.
x축과 평면 A-A'가 이루는 각도를 θyaw로 둡니다.
이것을 xy 평면에 수직 방향으로 보면 다음 그림과 같습니다.



θyaw는 다음 식으로 나타낼 수 있습니다.
$$\theta_{yaw} = tan\frac{Y}{X}$$

Step 2



A-A '평면에서 자른 단면도는 아래 그림입니다.
여기서 점 A에서 모선까지 수직선을 그려 그 선과 모선과의 교점을 점 B로 합니다.



OB의 단위 벡터 $\frac{\vec{OB}}{|\vec{OB}|}$를 ${\bf b}$로 가정합니다.



${\bf b}$는 다음 식으로 표현할 수 있습니다.
{\bf b} =
\left( 
\begin{matrix}
sin\phi cos\theta_{yaw} \\
sin\phi sin\theta_{yaw} \\
cos\phi
\end{matrix}
\right)

그림에서 알 수 있듯이 점 A와 원뿔의 최단 거리 문제는 점 A와 모선의 최단 거리 문제로 대체 할 수 있습니다.

Step 3



마지막은 벡터를 사용하여 풀어갑니다.
$\vec{OB}┻\vec{BA}$이므로,
$${\bf b}\cdot\vec{BA} = 0 $$
여기서,
\begin{eqnarray}
\vec{BA} &=& \vec{OA} - \vec{OB} \\
&=& \vec{OA} - t{\bf b} \ (tは媒介変数)
\end{eqnarray}

라고 표현할 수 있습니다.
따라서,
\begin{eqnarray}
{\bf b}\cdot \vec{BA} &=& {\bf b}\cdot (\vec{OA}-t{\bf b}) \\
&=& {\bf b}\cdot \vec{OA}-t = 0
\end{eqnarray}

됩니다.
$$\therefore t = {\bf b}\cdot\vec{OA}$$
따라서 $\vec{BA}$는 $\vec{BA}=\vec{OA}-t{\bf b}$가 되고 그 크기가 요구되는 거리가 됩니다.

좋은 웹페이지 즐겨찾기