pgfplots:绘制具有相应单位向量的多个向量

pgfplots:绘制具有相应单位向量的多个向量

假设您有一对由起点和终点指定的 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}

输出:

tikzpicture 具有三个不同的向量及其对应的单位向量(有缺陷)

这里对于蓝色向量,只有最左边的单位向量绘制正确(红色)。

答案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}

相关内容