答案1
如果您想学习 tikz,这是一个草稿。您需要使用 pgf 3.0。您可以避免使用 tkz-euclide。它仅适用于直角,但您可以在 stackexchange 上找到一些仅包含 tikz 的代码。您可以使用一些节点来放置一些文本或标签(阅读 pgfmanual 的一些页面!
代码更新 修正了移位组件中的一些错误
\documentclass{article}
\usepackage{amsmath,tkz-euclide}
\usetkzobj{all}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\path coordinate (a) at (6,2)
coordinate (b) at (-2,8)
coordinate (c) at (-1,7.25);
\draw (a) -> (b)
(-6,0) -- (6,0)
(0,-2) -- (0,10);
\path (0,0) coordinate(O) -- (-2,1.5) coordinate(R)--([turn]-90:1cm) coordinate(S);
\path (a) -- (c) --([turn]90:1cm) coordinate(c');
\begin{scope}[]
\draw[->,arrows = {-Latex}] (O) -- (R) ;
\draw[->,arrows = {-Latex}] (R) -- (S)
node [above left] {%
$\begin{pmatrix}
\sin\alpha\\
-\cos\alpha
\end{pmatrix}$} ;
\draw[->,arrows = {-Latex}] (O) -- (S) node[above=12pt,midway]{$x$} ;
\draw[->,arrows = {-Latex}] (c) -- (c');
\end{scope}
\draw[dashed] ([shift={(-0.6,-0.8)}]a) coordinate(a') -- ([shift={(-0.6,-0.8)}]b) coordinate(b');
% thks percusse to simplify the code above shift instead of xshift etc.
\tkzMarkRightAngles[size=0.4](O,R,S c,c',a') % thks wrtlprnft to see the mistake a instead of a'
\node[above right] at (a){$T(P,\alpha)$} ;
\node[below left] at (a'){$T(P,\alpha)-x$} ;
\end{tikzpicture}
\end{document}
如何以 X 和 alpha 开始?我不喜欢使用 tikz 进行数学运算的语法。let \p1 ... \n1 ... in ...
它可能更短,但我更喜欢旧风格。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\angle}{-32}
\coordinate (X) at (-1,1.25);
\pgfmathparse{veclen(-1,1.25)} \pgfmathresult \let\lX\pgfmathresult
\pgfmathparse{\lX*cos(\angle)} \pgfmathresult \let\r\pgfmathresult
\pgfmathparse{\lX*sin(-\angle)} \pgfmathresult \let\s\pgfmathresult
\draw (0,0) -- (X)
(-2,0) -- (2,0)
(0,-2) -- (0,2);
\draw (X)--(0,0)--([turn]{180-\angle}:\r) coordinate(R)--([turn] -90:\s) coordinate(S);
\end{tikzpicture}
\end{document}
答案2
如果你想学习,这里有一个教程类型的答案元帖子和luamplib
。如果您仔细地设置绘图,MP 会为您完成大部分算术运算。因此,您可以在此处更改alpha
线条的旋转或重新定义位置,X
图表的其余部分将相应地进行调整。
\documentclass[border=5mm]{standalone}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Schola Math}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
% first define some paths for x axis, y axis
path xx, yy;
xx = (left--right) scaled 144;
yy = (2 down -- 9 up) scaled 21;
draw xx withcolor .4 white;
draw yy withcolor .4 white;
% now the line, you can change the rotation by changing alpha
path tt;
alpha = -32;
tt = (left -- 2 right) scaled 50 rotated alpha shifted 160 up;
% the vector X
pair X;
X = (-42, 64); % or whatever
% and now find its components relative to the rotation of the line
pair r, s;
r = (xpart (X rotated -alpha), 0) rotated alpha;
s = (0, ypart (X rotated -alpha)) rotated alpha;
% draw the vector X and its components
draw r--X--s dashed withdots scaled 1/2 withcolor 1/2 white;
drawarrow origin -- r;
drawarrow origin -- s;
drawarrow origin -- X withcolor .53 red;
% finally the path shifted -s
path tt';
tt' = tt shifted -s;
% draw the paths
drawoptions(withcolor .673 blue);
draw tt;
draw tt' dashed evenly;
drawarrow point 0.1 of tt -- point 0.1 of tt';
drawoptions();
% add some labels
label.urt ("$\mathbf{X}$", 1/2 X);
label.lrt ("$\mathbf{s}$", 1/2 s);
label.llft("$\mathbf{r}$", 1/2 r);
label.ulft("$-\mathbf{s}$", 1/2[point 0.1 of tt, point 0.1 of tt']);
label.rt("$T(p,α)$", point 1 of tt);
label.rt("$T(p,α)-\mathbf{X}$", point 1 of tt');
endfig;
\end{mplibcode}
\end{document}
笔记
我在这里将向量表示为
pair
变量,因此我将其定义X
为一对并将其设置为(-42, 64)
红色箭头是从原点到该点的路径。
要将向量分解为其正交分量,可以使用
xpart
和ypart
。因此,xpart X
本例中为 -42。为了将矢量分解为与水平方向
T
旋转一定角度的线平行的分量,我首先旋转,然后提取和部分,然后将得到的正交点旋转回原始参考系。alpha
X
-alpha
x
y
对一对进行的操作
rotated theta
就像对和进行矩阵乘法一样sin theta
,cos theta
因此(x,y) rotated theta == ( x*cos(theta)+y*sin(theta), x*-sin(theta)+y*cos(theta) )