部分参考了上一个问题,这是在 3D 空间中尝试使用fill
颜色 a rectangle
。平面的点c
和d
作为其极顶点:
\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) 平面平行:y
c
d
使用 代替\draw (c) rectangle (d);
可得到fill
相同的结果。
该矩形应以向量d
和c
作为其边,因此与向量正交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}