使用 \let 在图中放置 Tikz 3D 节点

使用 \let 在图中放置 Tikz 3D 节点

我面临一个您可能可以帮助我的结果,这是我的 MWE(如果我手动输入值,它会给出良好的输出):

    \documentclass[tikz,border=5pt]{standalone}
    \usepackage{tikz,esvect,tikz-3dplot}
    \usetikzlibrary{3d,calc,intersections}

    \begin{document} 

    \begin{tikzpicture}[x={(0.710cm,-0.410cm)},y={(0cm,0.820cm)},z={(-0.710cm,-0.410cm)}]

    \pgfmathsetmacro{\r}{1}
    \pgfmathsetmacro{\l}{4}

    %%%%%% Helicoidale 3 %%%%%%
    \coordinate (centre) at (4,1,0);
    \coordinate (centrezp) at ($(centre)+(0,0,\l/2)$) ;
    \coordinate (centrezm) at ($(centre)-(0,0,\l/2)$) ;

    \begin{scope}[canvas is xy plane at z=0]
    \draw let \p1=($(centrezp)-(centrezm)$),\n1={atan2(\y1,\x1)} in 
    [fill=white]
    ($(centrezp)+(\n1+90:\r)$) -- ($(centrezm)+(\n1+90:\r)$)
    arc[radius=\r,start angle=\n1+90 ,delta angle=180] -- ($(centrezp)+(\n1-90:\r)$)
    arc[radius=\r,start angle=\n1+270,delta angle=-540];
    \end{scope}
    \draw %
    let \p1=(centre) in 
    [domain=0:\l*pi, samples=80, smooth]
    plot ( {4 +cos((-2.2+\x/4) r)}, {1-sin((-2.2+\x/4) r)} , \x/pi-2) ;

    \end{tikzpicture}

    \end{document}

如果你仔细阅读,你可能会注意到我没有使用

 let \p1=(centre) in

我曾尝试过使用它:

    plot ( {\x1 +cos((-2.2+\x/4) r)}, {\y1-sin((-2.2+\x/4) r)} , \x/pi-2) ;

但没有成功,情节完全不对。我试图显示 \x1 的内容,它给了我一个 pt 值,这可能是问题所在,因为其余的应该以 cm 为单位。但我找不到如何更改它。

你能帮助我吗 ?

好结果 :

在此处输入图片描述

糟糕的结果

在此处输入图片描述

答案1

有两个问题。第一个问题是默认情况下 plot 变量是\x,这与 calc 中的 冲突\x1。要解决这个问题,您可以直接使用variable=\t,例如,用于 plot。第二个问题是

 \coordinate (centre) at (4,1,0);

let \p1=(centre) in宏之后\x1执行之后不是计算为4,但为屏幕上投影的 x 坐标(centre)。但是,您不需要这个,也不calc需要。您只shift={(centre)}需要

\draw[shift={(centre)}] %
[domain=0:\l*pi, samples=80, smooth,variable=\t]
plot ( {cos((-2.2+\t/4) r)}, {-sin((-2.2+\t/4) r)} , \t/pi-2) ;

完整示例:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz,esvect,tikz-3dplot}
\usetikzlibrary{3d,calc,intersections}

\begin{document} 

\begin{tikzpicture}[x={(0.710cm,-0.410cm)},y={(0cm,0.820cm)},z={(-0.710cm,-0.410cm)}]

\pgfmathsetmacro{\r}{1}
\pgfmathsetmacro{\l}{4}

%%%%%% Helicoidale 3 %%%%%%
\coordinate (centre) at (4,1,0);
\coordinate (centrezp) at ($(centre)+(0,0,\l/2)$) ;
\coordinate (centrezm) at ($(centre)-(0,0,\l/2)$) ;

\begin{scope}[canvas is xy plane at z=0]
\draw let \p1=($(centrezp)-(centrezm)$),\n1={atan2(\y1,\x1)} in 
[fill=white]
($(centrezp)+(\n1+90:\r)$) -- ($(centrezm)+(\n1+90:\r)$)
arc[radius=\r,start angle=\n1+90 ,delta angle=180] -- ($(centrezp)+(\n1-90:\r)$)
arc[radius=\r,start angle=\n1+270,delta angle=-540];
\end{scope}
\draw[shift={(centre)}] %
   [domain=0:\l*pi, samples=80, smooth,variable=\t]
    plot ( {cos((-2.2+\t/4) r)}, {-sin((-2.2+\t/4) r)} , \t/pi-2) ;

\end{tikzpicture}

\end{document}

在此处输入图片描述

我还想说的是,可以检索声明的 3d 坐标的 x 分量。例如,在非官方的3D 工具库

相关内容