# Drawing a simple plane in 3D space

I'm trying to produce this simple 3d picture,

but, since it's the first time I draw a 3d pic, I'm not sure about how to get the plane passing through the line X. The following code shows a first attempt. I tried to use \filldraw, with random points, but I'm sure this is not the best way to do that.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}

\begin{tikzpicture}

\coordinate (O) at (0, 0, 0);
\coordinate (A) at (2,3,1);
\draw[thick,->] (O) --++ (4.5,0,0) node[anchor=north east]{spot 0};
\draw[thick,->] (O) --++ (0,4.5,0) node[anchor=north east]{spot 1};
\draw[thick,->] (O) --++ (0,0,6) node[anchor=east]{spot 2};
\draw[->] (O)--(A) node[anchor=west]{$\Phi$};
\draw [thick] ($(O)!4cm!270:(A)$) -- ($(O)!3cm!90:(A)$)                                       node[anchor=east]{$X$};
\filldraw[fill=blue!10, opacity=0.6] (2.5,-2.5,1) -- (2.5,1,1) --  (4,3,1) -- (4,-0.5,1) -- (2.5,-2.5,1);

\end{tikzpicture}


The plane H should intersect X and be perpendicular to p, which is why I defined first p, and then its orthogonal line X. Maybe should I define some coordinates on X , and then define somehow H? I'd like to get the "projection" of p also, as in the figure. That's not a projection in fact, it is there just to highlight that p is a vector of R3.

• Note that calc does not support "real" 3d computations. Also the projection of p on the plane requires a prescription. Since p is the normal the naive projection is zero. What kind of projection do you have in mind? What is the relation between between your point A and p? – marmot May 7 at 23:27
• I think it's clear to you now, anyway I edited the question so that it's more clear what p is. – Nenne May 8 at 8:22

I'd like to recommend tikz-3dplot for that.

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\tdplotsetmaincoords{105}{-30}
\begin{tikzpicture}[tdplot_main_coords,font=\sffamily]
\tdplotsetrotatedcoords{00}{30}{0}
\begin{scope}[tdplot_rotated_coords]
\begin{scope}[canvas is xy plane at z=0]
\fill[gray,fill opacity=0.3] (-2,-3) rectangle (2,3);
\draw[very thick] (-2,0) -- (2,0);
\path (-150:2) coordinate (H) (-1.5,0) coordinate(X);
\pgflowlevelsynccm
\draw[very thick,-stealth,gray] (0,0) -- (-30:1.5);
\end{scope}
\draw[stealth-] (H) -- ++ (-1,0,0.2) node[pos=1.3]{$H$};
\draw[stealth-] (X) -- ++ (0,1,0.2) node[pos=1.3]{$X$};
\draw[very thick,-stealth] (0,0,0) coordinate (O) -- (0,0,3) node[right]{$p$};
\end{scope}
\draw[-stealth]  (O)-- (2.5*\Radius,0,0) node[pos=1.15] {spot $0$};
\draw[-stealth] (O) -- (0,3.5*\Radius,0) node[pos=1.15] {spot $2$};
\draw[-stealth] (O) -- (0,0,2.5*\Radius) node[pos=1.05] {spot $1$};

• @Nenne Yes, there was a bug in the 3d library that got fixed not so long ago. So you may want to update your TeX installation. If that's not an option, you can add this fix. – marmot May 8 at 13:54
• @Nenne Add \usetikzlibrary{3d}\makeatletter \tikzoption{canvas is xy plane at z}[]{% \def\tikz@plane@origin{\pgfpointxyz{0}{0}{#1}}% \def\tikz@plane@x{\pgfpointxyz{1}{0}{#1}}% \def\tikz@plane@y{\pgfpointxyz{0}{1}{#1}}% \tikz@canvas@is@plane } \makeatother right before \begin{document}. – marmot May 8 at 14:44
• @Nenne No, only if you using the 3d library and specifically the xy plane. All other planes are fine yx, xz, zx, yz and zy. One can always rewrite a code made for the xy plane to work with the yx plane but this is a bit counter-intuitive. – marmot May 8 at 14:58