如何使用 tikzpicture 环境在两个平面之间画一条线并显示它们之间的距离

如何使用 tikzpicture 环境在两个平面之间画一条线并显示它们之间的距离

请考虑以下 MWE:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.15}

\pgfplotsset{
    axis equal image,
    axis lines = center,
    label style={font=\tiny},
    xlabel = $x$,
    ylabel = $y$,
    zlabel = $z$,
    xticklabel style = {font=\tiny},
    yticklabel style = {font=\tiny},
    zticklabel style = {font=\tiny},
}

\begin{document}
\begin{center}
    \begin{tikzpicture}
        \begin{axis} [
            xmax=3,
            zmax=3,
            zmin=-3,
            view={130}{20},
            %clip=false         <- Not working
        ]
            \addplot3[blue!60,samples=50] {3*x-4*y-8} node[below right] {\tiny $\alpha_2$};
            \addplot3[red,thick] (1+8*x,6*x,4*x) node[below right] {\tiny $L_1$};
            \addplot3[blue!60,samples=50] {3*x-4*y+2} node[below right] {\tiny $\alpha_1$};
        \end{axis}
    \end{tikzpicture}
\end{center}
\end{document}

平面之间的线

我想要这样的东西:

我想要的是

我尝试了一段时间来创建适合图纸的左侧图形,但轴总是比三个图形长。如何修复?

我想添加一个标签来指示平面和线之间的距离。

此外,x-axis 必须随着 -axis 而改变y

没有node labels显示,当我尝试显示clip=false时图表就消失了。

最后,samples=50我认为平面太不必要了(如果我不添加它,它们看起来就被剪掉了)。我们如何才能减少编译时间?

  • 直线方程L_1(x,y,z) = (1,0,0) + λ(8,6,4)
  • 飞机α_13x-4y+2=0
  • 飞机α_23x-4y-8=0

谢谢!

答案1

如果我没记错的话,这里有一个概念问题。如果你想画一个由 定义的平面a x + b y + c = 0,你不能使用\addplot3[blue!60,samples=50] {3*x-4*y+2};。后者将绘制一个函数z = a x + b y + c。但是,上面的平面方程告诉你,对于任何满足 方程的x和,可以是任意的。所以你需要通过在其中找到两个线性独立的向量来绘制平面,然后例如通过绘制由后者的差异定义的形状。既然你似乎喜欢动画,你可能想用 来做。yztikz-3dplot

\documentclass[tikz,border=3.14mm]{standalone}
\usepackage{tikz-3dplot}
\begin{document}
\foreach \X in {130,140,...,480}
{\begin{tikzpicture}[font=\sffamily,declare function={
f1(\x)=(3*\x+2)/4;
f2(\x)=(3*\x-8)/4;
f3(\x)=(3*\x-2)/4;
DeltaX=2;
X1=-6/25;
X2=24/25;
X3=(X1+X2)/2;
}]
\path[use as bounding box] (-4.5,-4) rectangle (4.5,4);
%\node[below right] at (-4.5,4) {\X};
\tdplotsetmaincoords{70}{\X}
\begin{scope}[tdplot_main_coords]
  \draw (0,0,0) -- (3,0,0) node[pos=1.1] {$x$};
  \draw[-latex] (0,0,0) -- (0,3,0) node[pos=1.1] {$y$};
  \draw[-latex] (0,0,0) -- (0,0,3) node[pos=1.1] {$z$};
  \ifnum\X<310
    \fill[blue,opacity=0.35] ({X2-DeltaX},{f2(X2-DeltaX)},2)
    -- ({X2-DeltaX},{f2(X2-DeltaX)},-2)
    -- ({X2+DeltaX},{f2(X2+DeltaX)},-2)
    -- ({X2+DeltaX},{f2(X2+DeltaX)},2) -- cycle;
    \draw[red,thick] ({X3+DeltaX},{(f3(X3+DeltaX)},0)
    -- ({X3-DeltaX},{(f3(X3-DeltaX)},0);
    \fill[red,opacity=0.35] ({X1-DeltaX},{f1(X1-DeltaX)},2)
    -- ({X1-DeltaX},{f1(X1-DeltaX)},-2)
    -- ({X1+DeltaX},{f1(X1+DeltaX)},-2)
    -- ({X1+DeltaX},{f1(X1+DeltaX)},2) -- cycle;
  \else
    \fill[red,opacity=0.35] ({X1-DeltaX},{f1(X1-DeltaX)},2)
    -- ({X1-DeltaX},{f1(X1-DeltaX)},-2)
    -- ({X1+DeltaX},{f1(X1+DeltaX)},-2)
    -- ({X1+DeltaX},{f1(X1+DeltaX)},2) -- cycle;
    \draw[red,thick] ({X3+DeltaX},{(f3(X3+DeltaX)},0)
    -- ({X3-DeltaX},{(f3(X3-DeltaX)},0);
    \fill[blue,opacity=0.35] ({X2-DeltaX},{f2(X2-DeltaX)},2)
    -- ({X2-DeltaX},{f2(X2-DeltaX)},-2)
    -- ({X2+DeltaX},{f2(X2+DeltaX)},-2)
    -- ({X2+DeltaX},{f2(X2+DeltaX)},2) -- cycle;
  \fi
\end{scope}
\end{tikzpicture}}
\end{document}

在此处输入图片描述

相关内容