
답변1
다음은 라이브러리를 사용하는 방법입니다 3dtools
.여기. 어느 날 GitHub가 수학적인 배경 지식을 가진 사용자에게 더 쉽게 접근할 수 있게 되면 이 라이브러리는 CTAN의 일부가 될 것입니다... 이 라이브러리를 사용하면 좌표에 액세스하고 평면과의 교차점을 분석적으로 계산할 수 있습니다.
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{intersections,perspective,3d,3dtools}
\begin{document}
\begin{tikzpicture}[3d view={30}{15}]
\path (0,0,0) coordinate (O)
foreach \X[count=\Y] in {(3,0,0),(2,1,1),(2,0,3),(1,1,3),(0,0,3)}
{(O) -- \X coordinate (p\Y) coordinate[pos=-0.3] (p-\Y)};
\path[canvas is xy plane at z=2,fill=blue!30] (
(-4,-4) coordinate (r1) -- (4,-4) coordinate
(r2) -- (4,4) coordinate
(r3) -- (-4,4) -- cycle;
\path[name path=edge] (r1) -- (r2) -- (r3);
\foreach \Y in {1,...,5}
{\path[name path=ray] (p-\Y) -- (p\Y);
\path[name intersections={of=edge and ray,total=\t},draw,thick]
\ifnum\t=1
(p-\Y) -- (intersection-1) coordinate (i-\Y)
\else
(p-\Y) -- (p\Y)
\fi;
\pgfmathsetmacro{\itest}{TD("(p\Y)o(0,0,1)")}
\ifdim\itest pt>0pt
\pgfmathsetmacro{\tt}{2/TD("(p\Y)o(0,0,1)")}
\ifdim\tt pt<1pt
\pgfmathsetmacro{\myint}{TD("\tt*(p\Y)")}
\draw[thick,dashed] (\myint) -- (i-\Y);
\draw[thick] (\myint) node[circle,inner sep=1pt,fill]{} -- (p\Y);
\fi
\fi
}
\end{tikzpicture}
\end{document}