自动箭头显示矢量相对于标准基矢量的运动

自动箭头显示矢量相对于标准基矢量的运动

在此处输入图片描述

我已经得到了我想要的外观,但应该有更简单的方法。我原本想用 \foreach 来制作重复的箭头,但也许有一种方法可以定义 \draw (a) -- (b),它会自动将箭头放置在多边形路径的顶点之间?

如果这可以在 3D 环境下运行就更好了。

\documentclass{article}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[ultra thick, lightgray]
    \draw[->] (0,0) -- (1,0);
    \draw[->] (1,0) -- (2,0);
    \draw[->] (2,0) -- (2,1);
    \draw[->] (2,1) -- (2,2);
    \draw[->] (2,2) -- (2,3);
    \draw[->][purple][->] (0,0) -- (2,3);
\end{tikzpicture}

\end{document}

答案1

这是\pic(第一种)方法。我制作了一个\pic按顺序绘制 x、y、z 分量然后绘制矢量的程序。需要注意的是:仅适用于整数坐标。这是 3D 版本,但我认为很容易修改为 2D 版本。

代码:

\documentclass[tikz,border=1.618mm]{standalone}
\usetikzlibrary{perspective}
\tikzset
{%
   pics/vector basis/.style n args={3}{code=%
   {% x component
      \pgfmathtruncatemacro\myabs{abs(#1)}
      \ifnum\myabs>0
        \pgfmathtruncatemacro\mysgn{\myabs/#1}
        \foreach\i in {1,...,\myabs}
          \draw[-latex,gray] ({\mysgn*(\i-1)},0,0) --++ (\mysgn,0,0);
      \fi
    % y component
      \pgfmathtruncatemacro\myabs{abs(#2)}
      \ifnum\myabs>0
        \pgfmathtruncatemacro\mysgn{\myabs/#2}
        \foreach\i in {1,...,\myabs}
          \draw[-latex,gray] (#1,{\mysgn*(\i-1)},0) --++ (0,\mysgn,0);
      \fi
    % z component
      \pgfmathtruncatemacro\myabs{abs(#3)}
      \ifnum\myabs>0
        \pgfmathtruncatemacro\mysgn{\myabs/#3}
        \foreach\i in {1,...,\myabs}
          \draw[-latex,gray] (#1,#2,{\mysgn*(\i-1)}) --++ (0,0,\mysgn);
      \fi
    % vector
      \draw[-latex,pic actions] (0,0,0) -- (#1,#2,#3);
   }},
}

\begin{document}
\begin{tikzpicture}[3d view={120}{20}]
\draw[-latex] (0,0,0) -- (2,0,0) node[left]  {$x$};
\draw[-latex] (0,0,0) -- (0,2,0) node[right] {$y$};
\draw[-latex] (0,0,0) -- (0,0,3) node[above] {$z$};
\pic[red]  {vector basis={-2}{0}{3}};
\pic[blue] {vector basis={1}{2}{3}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容