使用 let 命令生成三维坐标

使用 let 命令生成三维坐标

我想创建一个带有 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。

感谢您的帮助。

相关内容