![使用 let 命令生成三维坐标](https://linux22.com/image/469300/%E4%BD%BF%E7%94%A8%20let%20%E5%91%BD%E4%BB%A4%E7%94%9F%E6%88%90%E4%B8%89%E7%BB%B4%E5%9D%90%E6%A0%87.png)
我想创建一个带有 3D 坐标的 tikz 图形。我想使用 3D 坐标来简化生活,但是当我使用 let 命令实现交叉乘积时,会抛出错误“尺寸太大。...(X3) 在坐标 (X) 处 (\x1, \x2, \x3);”。我发现使用三个坐标是个问题,所以如果我只使用 (\x1, \x2),一切都会正常。我不明白的是,它一开始对 Y 和 V 有效,但对 X 无效。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,3d}
\begin{document}
\begin{tikzpicture}[scale=2]
% Define the pinhole coordinates in 3D space
\coordinate (O) at (0,0.25,0);
% Define the vector pointing from the pinhole to the sensor center
\coordinate (V1) at (0,);
\coordinate (V2) at (0.25,);
\coordinate (V3) at (1,);
\path let \p1=(V1), \p2=(V2), \p3=(V3) in coordinate (V) at (\x1, \x2, \x3);
% Define the sensor center C using O and V
\coordinate (C) at ($(O) + (V)$);
% Define the sensor plane Y coordinate direction as (0, 1, 0)
\coordinate (Y1) at (0,);
\coordinate (Y2) at (1,);
\coordinate (Y3) at (0,);
\path let \p1=(Y1), \p2=(Y2), \p3=(Y3) in coordinate (Y) at (\x1, \x2, \x3);
% Define the sensor plane X coordinate direction as the cross product of V and Y by using the formula (V(2)*Y(3) - V(3)*Y(2), V(3)*Y(1) - V(1)*Y(3), V(1)*Y(2) - V(2)*Y(1))
\path let \p1=(V1), \p2=(V2), \p3=(V3), \p4=(Y1), \p5=(Y2), \p6=(Y3), \n1={\x2*\x6 - \x3*\x5} in coordinate (X1) at (\n1,);
\path let \p1=(V1), \p2=(V2), \p3=(V3), \p4=(Y1), \p5=(Y2), \p6=(Y3), \n1={\x3*\x4 - \x1*\x6} in coordinate (X2) at (\n1,);
\path let \p1=(V1), \p2=(V2), \p3=(V3), \p4=(Y1), \p5=(Y2), \p6=(Y3), \n1={\x1*\x5 - \x2*\x4} in coordinate (X3) at (\n1,);
% Define X as the coordinate of (X1, X2, X3)
\path let \p1=(X1), \p2=(X2), \p3=(X3) in coordinate (X) at (\x1, \x2, \x3);
\end{tikzpicture}
\end{document}
对于上下文:我决定将 V 和 Y 分成三个部分,因为我不能在 let 中使用 \z。
感谢您的帮助。