假设您有一对由起点和终点指定的 3D 矢量。现在您想要定义一个命令,从同一原点绘制其中一个矢量及其相应的单位矢量。
之前已经回答过类似的问题这里- 然而该解决方案仅适用于从 开始的向量(0,0,0)
。
当我努力同时在两个给定的坐标上应用所提出的\foreach
方法并考虑到解决方案的年龄时,我使用calculator
包来解决这个问题。
我得到了一个单个向量的功能输出——不幸的是,只有最后一个单位向量(称为\vecuvec{1,1,0}{0,2,1}
)在的多次执行中被正确绘制,\vecuvec
因为坐标(\sola,\solb,\solc)
似乎被的最后一次执行覆盖了\vecuvec
。
是否存在切实可行的替代方法,例如以不同的方式存储/访问坐标或更改命令内的范围\vecuvec
?
梅威瑟:
\documentclass{article}
\usepackage{calculator}
\usepackage[]{pgfplots}
\usepackage{tikz-3dplot}
\pgfplotsset{compat=1.15}
% Draw vector and corresponding unitvector
\newcommand{\vecuvec}[2] %start point, end point (of vector)
{ \VECTORSUB(#2)(#1)(\sola,\solb,\solc)
\UNITVECTOR(\sola, \solb, \solc)(\sola,\solb,\solc)
%arrow in blue
\draw[->,thick,blue] (#1) -- (#2);
%corresponding unit-vector in red:
\draw[->, thick,red] (#1) -- ($(#1)+(\sola,\solb,\solc)$);
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xtick={0,1,...,4}, ytick={0,1,...,4}, ztick={0,1,...,4},
xmin=0,xmax=4,ymin=0,ymax=4, zmin=0,zmax=4]
\vecuvec{3,1,0}{4,2,1};
\vecuvec{2,2,2}{4,3,3};
\vecuvec{1,1,0}{0,2,1}; %only the last one works as intended
\end{axis}
\end{tikzpicture}
\end{document}
输出:
这里对于蓝色向量,只有最左边的单位向量绘制正确(红色)。
答案1
\draw
在循环中使用宏的相同技巧(见pgfplots
(参见 手册第 8.1 节实用程序命令)似乎在这里也有效,即
\edef\temp{\noexpand\draw[->, thick,red] (#1) -- ($(#1)+(\sola,\solb,\solc)$);}
\temp
\sola
这会导致等立即扩张。
\documentclass{article}
\usepackage{calculator}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
% Draw vector and corresponding unitvector
\newcommand{\vecuvec}[2] %start point, end point (of vector)
{ \VECTORSUB(#2)(#1)(\sola,\solb,\solc)
\UNITVECTOR(\sola, \solb, \solc)(\sola,\solb,\solc)
%arrow in blue
\draw[->,thick,blue] (#1) -- (#2);
%corresponding unit-vector in red:
\edef\temp{\noexpand\draw[->, thick,red] (#1) -- ($(#1)+(\sola,\solb,\solc)$);}
\temp
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xtick={0,1,...,4}, ytick={0,1,...,4}, ztick={0,1,...,4},
xmin=0,xmax=4,ymin=0,ymax=4, zmin=0,zmax=4]
\vecuvec{3,1,0}{4,2,1};
\vecuvec{2,2,2}{4,3,3};
\vecuvec{1,1,0}{0,2,1};
\end{axis}
\end{tikzpicture}
\end{document}