My solution is not elegant as the Herbert one, but it is given using LuaLaTeX.
\documentclass{standalone}
\usepackage{tikz,tikz-3dplot,luacode}
\def\prPoint#1{\directlua{%
for i,v in ipairs(#1) do
tex.sprint(v)
if i\string~=3 then tex.sprint(",") end
end
}}
\begin{document}
\tdplotsetmaincoords{45}{10}
\begin{tikzpicture}[scale=1,tdplot_main_coords,>=stealth',font=\scriptsize]
\begin{luacode}
-----------
-- PLANE --
-----------
A = { .5,-1.5,0}
B = {4 ,-1.5,0}
C = {4 , 1.5,0}
AB = {B[1]-A[1],B[2]-A[2],B[3]-A[3]}
AC = {C[1]-A[1],C[2]-A[2],C[3]-A[3]}
plane_dir = {AB[2]*AC[3]-AB[3]*AC[2],
AB[3]*AC[1]-AB[1]*AC[3],
AB[1]*AC[2]-AB[2]*AC[1]}
local mod = math.sqrt(plane_dir[1]^2+plane_dir[2]^2+plane_dir[3]^2)
plane_dir = {plane_dir[1]/mod,plane_dir[2]/mod,plane_dir[3]/mod}
plane_d = -A[1]*(AB[2]*AC[3]-AB[3]*AC[2])+
A[2]*(AB[1]*AC[3]-AB[3]*AC[1])-
A[3]*(AB[1]*AC[2]-AB[2]*AC[1])
function plane(x,y)
return -(plane_dir[1]*x+plane_dir[2]*y+plane_d)/(plane_dir[3])
end
----------
-- LINE --
----------
D = {2, 1.5,-4}
E = {2,.3 , 1}
line_dir = {D[1]-E[1],D[2]-E[2],D[3]-E[3]}
local mod = math.sqrt(line_dir[1]^2+line_dir[2]^2+line_dir[3]^2)
line_dir = {line_dir[1]/mod,line_dir[2]/mod,line_dir[3]/mod}
function line(t)
return {E[1]+line_dir[1]*t,E[2]+line_dir[2]*t,E[3]+line_dir[3]*t}
end
------------------------
-- INTERSECTION POINT --
------------------------
t = -(plane_d+(plane_dir[1]*E[1]+plane_dir[2]*E[2]+plane_dir[3]*E[3]))/
(plane_dir[1]*line_dir[1]+plane_dir[2]*line_dir[2]+plane_dir[3]*line_dir[3])
int_point = line(t)
\end{luacode}
% Plane
\draw[fill=gray!80!](\prPoint{A})--
(\prPoint{B})--
(\prPoint{C})--
(\prPoint{{.5, 1.5,plane(.5,1.5)}})--
cycle;
% Points
\coordinate (or) at (2,1.5,-4);
\tdplotsetcoord{p}{5}{10}{0};
\tdplotsetcoord{oo}{0}{0}{0};
% Line
\draw (\prPoint{D})--(\prPoint{int_point});
\draw[red] (\prPoint{int_point})--(\prPoint{E});
% Axis
\draw[->] (oo) -- +(.5,0,0) node[right]{$x$};
\draw[->] (oo) -- +(0,.5,0) node[right]{$y$};
\draw[->] (oo) -- +(0,0,.5) node[left]{$z$};
\end{tikzpicture}
\end{document}
Have fun!!