TikZ,在三维空间中使用计算库

TikZ,在三维空间中使用计算库

Z 库calc可以处理角度值:

\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);

\draw (d) -- ($(c)!1.4cm!90:(a)$) coordinate (h);

\end{tikzpicture}

\end{document}

输出为:

在此处输入图片描述

($(c)!1.4cm!90:(a)$)给定任何正值或负值的角度,h始终位于 (x,z) 平面。在这种情况下,线段c--h应该y相对于 (x,z) 平面垂直(平行于)。那么,如何($(c)!1.4cm!90:(a)$)修改表达式以实现这一点呢?


正如评论中提到的,上面的代码没有使用tikz-3dplot。但是,如果这个包可以提供传统 Ti 之外的解决方案仅 Z 方法,可以,并且可以在这里使用。


要求的解释

这个问题是一系列问题的一部分(第一个问题第二个问题第三个问题第四个问题第 5 个问题)。

要求描绘一个相互正交的向量三元组。其中一个向量(b上图中的 )位于 (x,z) 平面中一般的位置并指向原点;飞机由矢量生成的c,并d应突出显示。此三元组应在 3D 空间中描绘,我应该能够任意旋转空间方向。轴的最终配置应如图所示这个答案z轴指向右。

工具通过什么可以获得这一点并不重要:它可以是 TiZ,以及tikz-3dplot,以及它们的组合。是否tikz-3dplot必须使用是问题的一部分:有时可能是仅有的工具,有时它可能只是一个选择。目前为止,我知道的还不够tikz-3dplot

所有这些总结并不是一开始就写的,因为我很难,甚至不可能,这张照片我无法提供任何关于一般的图片。这个问题肯定会遭到反对和批评(因为它是第一个问题)。

第二个问题实际上是模棱两可的,因为我没有注意到 45° 线。鉴于此,我总是试图提供快速而准确的问题,做出一些尝试。

感谢所有尝试处理这些图像的人。我希望这能尽可能地满足评论中提出的澄清要求。

答案1

这不是真正的答案,但可能是第一步。如果加载库 3d,则可以指定要在其中工作的平面。这是一个例子。

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

\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);
\begin{scope}[canvas is yz plane at x=1]
\draw (d) -- ($(c)!1.4cm!90:(a)$) coordinate (h);
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如您所见,语法相当不言自明。然而,我很难理解你到底想要什么,因为正如@Kpym 指出的那样,你的指示有些含糊不清。但我确实希望这个例子能帮助你实现你想要的。

还请注意,我花了一些时间将您的代码转换为 tikz-3dplot,但没有找到一种优雅的方法。障碍包括 tikz-3dplot 不能太直接地使 y 轴指向上方,它使用欧拉角,这使得很难绕 x 轴旋转,并且需要反射才能使轴匹配。这些不是概念问题,但我也无法制作出优雅的东西。

相关内容