在 Tikz 中绘图时出现的问题

在 Tikz 中绘图时出现的问题

我需要将此图放入我的报告中(它是一个向量 x,分成两个向量 - 一个与上面的线 T(p,alpha)平行,另一个与另一个向量正交)

然后画一条虚线,对应 T(p,alpha) 的平行位移

有人能帮帮我吗?:)

谢谢 :)

在此处输入图片描述

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

  • 红色箭头是从原点到该点的路径。

  • 要将向量分解为其正交分量,可以使用xpartypart。因此,xpart X本例中为 -42。

  • 为了将矢量分解为与水平方向T旋转一定角度的线平行的分量,我首先旋转,然后提取和部分,然后将得到的正交点旋转回原始参考系。alphaX-alphaxy

  • 对一对进行的操作rotated theta就像对和进行矩阵乘法一样sin thetacos theta因此

    (x,y) rotated theta == ( x*cos(theta)+y*sin(theta), x*-sin(theta)+y*cos(theta) ) 
    

相关内容