
решение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}