TikZ,在三维空间中绘制矩形

TikZ,在三维空间中绘制矩形

部分参考了上一个问题,这是在 3D 空间中尝试使用fill颜色 a rectangle。平面的点cd作为其极顶点:

\documentclass[border=2mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc,intersections}

\begin{document}

\begin{tikzpicture}

\draw[->] (-3,0,0) -- (3,0,0) node[below right] {$x$};
\draw[->] (0,-3,0) -- (0,3,0) node[above right] {$y$};
\draw[->] (0,0,-3) -- (0,0,3) node[below right] {$z$};

\coordinate (o) at (0,0,0);
\coordinate (a) at (3.1,0,1.2);

\draw[dashed] (a) -- (o);

\path (a) -- coordinate[pos=0.32] (b) (o);

\draw [thick,-{Straight Barb},orange] (a) -- ($(a)!1.2cm!90:(o)$) coordinate[label={[black]above left:c}] (c);
\draw[thick,-{Straight Barb},gray] (a) -- node[pos=0.7, below=0.35em] {b} (b);
\draw [thick,-{Straight Barb},red] (a) -- ([shift={(0,1.5,0)}]a) coordinate[label={[black]above right:d}] (d);

\fill[blue!50,opacity=0.6] (c) rectangle (d);

\end{tikzpicture}

\end{document}

然而,只考虑了点和的和分量,x因此矩形与 (x,y) 平面平行:ycd

在此处输入图片描述

使用 代替\draw (c) rectangle (d);可得到fill相同的结果。

该矩形应以向量dc作为其边,因此与向量正交b

1)如何实现这一点?

2)如何自定义将矩形表面扩展到矢量d和之外c,从而绘制更大的区域,并保持空间中的相同方向?


正如答案中提到的,上面的代码没有使用 tikz-3dplot。但是,如果这个包除了传统的仅使用 TikZ 的方法之外还能提供解决方案,那么也可以在这里使用。

答案1

绘制这个并不太难,你只需要用相应的角填充多边形。

在此处输入图片描述

\documentclass[border=2mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc,intersections}

\begin{document}

\begin{tikzpicture}

\draw[->] (-3,0,0) -- (3,0,0) node[below right] {$x$};
\draw[->] (0,-3,0) -- (0,3,0) node[above right] {$y$};
\draw[->] (0,0,-3) -- (0,0,3) node[below right] {$z$};

\coordinate (o) at (0,0,0);
\coordinate (a) at (3.1,0,1.2);

\draw[dashed] (a) -- (o);

\path (a) -- coordinate[pos=0.32] (b) (o);

\draw [thick,-{Straight Barb},orange] (a) -- ($(a)!1.2cm!90:(o)$) coordinate[label={[black]above left:c}] (c);
\draw[thick,-{Straight Barb},gray] (a) -- node[pos=0.7, below=0.35em] {b} (b);
\draw [thick,-{Straight Barb},red] (a) -- ([shift={(0,1.5,0)}]a) coordinate[label={[black]above right:d}] (d);

\fill[blue!50,opacity=0.6] (a) -- (c) -- ($(c) + ($(d)-(a)$) $) -- (d) -- cycle;

\end{tikzpicture}

\end{document}

一般评论:我看到您发布了许多问题。这些问题都很好,但我真的很想知道为什么你们在tikz-3dplot根本不使用该软件包的情况下都给它们加上标签。我可能能够针对其中一些甚至所有问题发布解决方法,但我觉得如果您开始使用该软件包,情况会好得多。(请注意,我尚未明确证实事情会变得更简单,但我强烈怀疑会。)您不想使用该软件包有什么原因吗?

答案2

为了完整起见:给出了@marmot 的回答及其有用的提示,这也是回答问题 2 的尝试。生成的扩展矩形放在背景层中:因此,无论不透明度如何,它都无法隐藏矢量。

\documentclass[border=2mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,calc,intersections,backgrounds}

\begin{document}

\begin{tikzpicture}

\draw[->] (-3,0,0) -- (3,0,0) node[below right] {$x$};
\draw[->] (0,-3,0) -- (0,3,0) node[above right] {$y$};
\draw[->] (0,0,-3) -- (0,0,3) node[below right] {$z$};

\coordinate (o) at (0,0,0);
\coordinate (a) at (3.1,0,1.2);

\draw[dashed] (a) -- (o);

\path (a) -- coordinate[pos=0.32] (b) (o);

\draw [thick,-{Straight Barb},orange] (a) -- ($(a)!1.2cm!90:(o)$) coordinate[label={[black]above left:c}] (c); %node[black,above left] (c) {c};
\draw[thick,-{Straight Barb},gray] (a) -- node[pos=0.7, below=0.35em] {b} (b);
\draw [thick,-{Straight Barb},red] (a) -- ([shift={(0,1.5,0)}]a) coordinate[label={[black]above right:d}] (d); % node[black,below right] (d) {d};

\coordinate (e) at ($(c) + ($(d)-(a)$) $);

\path[name path=dupright] (c) -- coordinate[pos=1.5] (dupright) (d);
\path[name path=ddownleft] (d) -- coordinate[pos=1.5] (ddownleft) (c);
\path[name path=ddownright] (e) -- coordinate[pos=1.5] (ddownright) (a);
\path[name path=dupleft] (a) -- coordinate[pos=1.5] (dupleft) (e);

\begin{scope}[on background layer]
    \filldraw[draw=none,fill=lightgray] (dupleft) -- (dupright) -- (ddownright) -- (ddownleft) -- cycle;
\end{scope}

\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容