我面临一个您可能可以帮助我的结果,这是我的 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 工具库。