![如何在 Tikz 中将标量与定义的变量 (\def) 相乘](https://linux22.com/image/461584/%E5%A6%82%E4%BD%95%E5%9C%A8%20Tikz%20%E4%B8%AD%E5%B0%86%E6%A0%87%E9%87%8F%E4%B8%8E%E5%AE%9A%E4%B9%89%E7%9A%84%E5%8F%98%E9%87%8F%20(%5Cdef)%20%E7%9B%B8%E4%B9%98.png)
我目前有以下工作代码:
\begin{tikzpicture}
\def\myr{7}
\def\mytheta{45}
\def\myphi{50}
\def\px{{\myr*sin(\mytheta)*cos(\myphi)}}
\def\py{{\myr*sin(\mytheta)*sin(\myphi)}}
\def\pz{{\myr*cos(\mytheta)}}
\draw[axis] (0,0,0) -- (1.2*\myr,0,0) node[left]{$x$};
\draw[axis] (0,0,0) -- (0,1.2*\myr,0) node[right]{$y$};
\draw[axis] (0,0,0) -- (0,0,1.2*\myr) node[right]{$z$};
\end{tikzpicture}
当我在第一行替换1.2*\myr
for时,问题就开始了。我尝试写入,但没有解决问题。我也尝试在末尾添加and,但没有成功。我该如何解决这个问题?谢谢阅读!1.2*\px
\draw
{1.2*\px}
cm
pt
1.2*\px
解决了
{}
通过删除定义周围的\px, \py, \pz
并1.2*\myr
用替换解决了该问题{1.2*\px}
。
解决这个问题的更好方法是:在里面declare function = {px = \myr*sin(\mytheta)*cos(\myphi);}
添加,然后只写入。[]
\begin{tikzpicture}
1.2*px
答案1
删除定义周围的一对
{}
。PGFMath 假设此处为数组。您仍然需要{1.2*\px}
。使用
declare function
,以便您只需使用1.2*px
(尽管我myPx
在下面的代码中使用)。设置X,是和是长度坐标坐标系,然后您就可以使用
(1.2, 0, 0)
。
笔记:有关 TikZ 中的更多 3D 内容,请访问
- 这
3d
图书馆, - 这
perspective
图书馆和 - 这
tikz-3dplot
包裹。
代码
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[axis/.style=->]
\def\myr{7}
\def\mytheta{45}
\def\myphi{50}
\def\px{\myr*sin(\mytheta)*cos(\myphi)}
\def\py{\myr*sin(\mytheta)*sin(\myphi)}
\def\pz{\myr*cos(\mytheta)}
\draw[axis] (0,0,0) -- ({1.2*\px},0,0) node[right]{$x$};
\draw[axis] (0,0,0) -- (0,{1.2*\py},0) node[above]{$y$};
\draw[axis] (0,0,0) -- (0,0,{1.2*\pz}) node[below left]{$z$};
\end{tikzpicture}
\begin{tikzpicture}[
axis/.style=->,
declare function={
myR = 7; myTheta = 45; myPhi = 50;
px(\radius,\theta,\phi) = \radius*sin(\theta)*cos(\phi);
py(\radius,\theta,\phi) = \radius*sin(\theta)*sin(\phi);
pz(\radius,\theta,\phi) = \radius*cos(\theta);
myPx = px(myR, myTheta, myPhi);
myPy = py(myR, myTheta, myPhi);
myPz = pz(myR, myTheta, myPhi);}]
\draw[axis] (0,0,0) -- (1.2*myPx,0,0) node[right]{$x$};
\draw[axis] (0,0,0) -- (0,1.2*myPy,0) node[above]{$y$};
\draw[axis] (0,0,0) -- (0,0,1.2*myPz) node[below left]{$z$};
\end{tikzpicture}
\begin{tikzpicture}[
axis/.style=->,
my cs/.style n args={3}{
x={1cm*(#1)*sin(#2)*cos(#3)},
y={1cm*(#1)*sin(#2)*sin(#3)},
z={-.385cm*(#1)*cos(#2)}},
my cs={7}{45}{50}]
\draw[axis] (0,0,0) -- (1.2, 0, 0 ) node[right]{$x$};
\draw[axis] (0,0,0) -- (0, 1.2, 0 ) node[above]{$y$};
\draw[axis] (0,0,0) -- (0, 0, 1.2) node[below left]{$z$};
\end{tikzpicture}
\end{document}