如何在非水平线上绘制两个三角形?

如何在非水平线上绘制两个三角形?

我是 TikZ 包的初学者,尝试在非水平线上绘制两个三角形,如下所示。

在此处输入图片描述

有没有办法先在直线上画出三角形,然后旋转它们?

答案1

一个起点。通过\foreach循环可以避免两个三角形的代码重复。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usepackage{xcolor}
\begin{document}
\begin{tikzpicture}    
  \def\AngleS{20}
  \def\AngleTheta{45}
  \def\RadiusTheta{.8cm}
  \def\ArrowLen{2cm}
  \definecolor{rosa}{HTML}{F79796}
  \definecolor{myred}{HTML}{EE1450}
  \definecolor{myblue}{HTML}{0083CA}
  \tikzset{
    myarrowtip/.tip={Triangle[length=12pt, width=8pt]},
    myarrow/.style={draw={#1},line width=2.5pt, -{myarrowtip}},
  }
  \draw
    (\AngleS:9cm) node (s) {$s$}
    (0, 0) --
    coordinate[pos=.22] (si)
    coordinate[pos=.66] (sf)
    (s)
  ;
  \foreach \start/\ssub in {si/i, sf/f} {
    \draw
      (\start) ++(\AngleS:\RadiusTheta)
      arc (\AngleS:\AngleS + \AngleTheta:\RadiusTheta)
      (\start) ++(\AngleS + \AngleTheta/2:\RadiusTheta + 1.5ex)
      node {$\theta$}
    ;
    \draw[myarrow=rosa]
      (\start) -- ++(\AngleS:\ArrowLen)
      coordinate (tmpA)
      node[below] {$\vec F_s$}
    ;
    \draw[myarrow=red]
      (\start) -- ++(\AngleS + \AngleTheta:{\ArrowLen/cos(\AngleTheta)})
      coordinate (tmpB)
      node[left] {$\vec F$}
    ;
    \draw[dashed] (tmpA) -- (tmpB);
    \fill[radius=3pt]
      (\start) circle[]
      ++(\AngleS - 90:1em) node {$s_{\ssub}$}
    ;
  }
  \draw[myarrow=myblue]
    (si) ++(\AngleS - 90:2em)
    -- node[below] {$\Delta \vec r$}
    ++(\AngleS:{(.66 - .22) * 9cm})
  ;
\end{tikzpicture}
\end{document}

结果

相关内容