在 TikZ 中表示角度的最佳方法?

在 TikZ 中表示角度的最佳方法?

用弧和标签表示角度名称,表示角度的最好和最简单的方法是什么?我希望能够(显然)控制角度所在的顶点、角度的名称,还可以控制小弧的半径以及是否应该用颜色填充整个圆形部分。

答案1

我刚刚看了这个问题和相关问题,但我没有看到任何地方有标记角度的解决方案当你不知道它的尺寸时(也许我还没有读完关于该主题的所有帖子......)。

以下是具体内容:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}
\coordinate[label=below left:$A$] (A) at (0,0);
\coordinate[label=below right:$x$] (X) at (6,1);
\coordinate[label=above left:$y$] (Y) at (3,5);

\draw[thick] (X) -- (A) -- (Y);

% Mark the angle XAY
\begin{scope}
\path[clip] (A) -- (X) -- (Y);
\fill[red, opacity=0.5, draw=black] (A) circle (5mm);
\node at ($(A)+(30:7mm)$) {$\theta$};
\end{scope}

\end{tikzpicture}

\end{document}

我画了一个完整的圆,然后用定义角度的三个点构建的路径来隐藏不好的部分。这看起来很容易,可能不是一种好方法,但效果很好。在这里我手动将角度测量放到位,\theta但肯定可以自动化。

如果您认为在某些情况下它不起作用,请随时发表评论!

标记一个角度

答案2

另一个TikZ只有 的例子。重要的是,\draw [color=black](a)+(10:1.2) node[rotate=0] {$\beta$}; 角度的标签是在中心的帮助下放置的,并且该中心被平移(a)+(10:1.2)

\documentclass[11pt]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{through,calc}

\begin{document}
\begin{tikzpicture}[scale=.8]
\coordinate (o) at (3,0);
\coordinate [label=150:$A$](a) at (0,0);
\coordinate [label=0:$B$](b) at (6,0);
\coordinate[label=90:$C$] (c) at (4,5);
\draw (a) -- (b) -- (c) -- cycle;
\node(c1) at (o)[draw,circle through=(a)] {};
\coordinate[label=90:$D$] (d) at (intersection 1 of c1 and a--c);
\coordinate[label=80:$E$] (e) at (intersection 1 of c1 and b--c);
\coordinate[label=60:$F$] (f) at (intersection  of a--e and b--d);
\coordinate[label=-90:$H$] (h) at ($(a)!(c)!(b)$);
\fill[red] let \p1=(f),\p2=(h) in (\x2,\y1) circle (2pt);
\draw[blue] (c) -- ($(a)!(c)!(b)$);
\draw [blue,very thick](b) +(142:.8cm) arc (142:180:.8cm);
\draw [color=black](b)+(160:1) node[rotate=0] {$\alpha$};
\draw [green!50!black,very thick](a) +(0:.8cm) arc (0:21:.8cm);
\draw [color=black](a)+(10:1.2) node[rotate=0] {$\beta$};
\draw [red!50!black,very thick](a) +(21:.8cm) arc (21:53:.8cm);
\draw [color=black](a)+(32:1.1) node[rotate=0] {$\gamma$};
\draw [red!50!black,very thick](b) +(110:.8cm) arc (110:142:.8cm);
\draw [color=black](b)+(128:1) node[rotate=0] {$\gamma$};
\draw [orange,very thick](c) +(-70:.8cm) arc (-70:-127:.8cm);
\draw [color=black](c)+(-100:1.2) node[rotate=0] {$\delta$};
\draw [orange,very thick](f) +(143:.8cm) arc (143:203:.8cm);
\draw [orange,very thick](f) +(24:.6cm) arc (24:-38:.6cm);
\draw (a) -- (e);
\draw (d) -- (b);
\draw[anchor=base,color=blue] (h.center)  ++(.3,0)  -- ++(0,0.3) -- ++(-0.3,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

我采用了 PolGab 的代码并做了一些改动:

  1. 放置一个可选参数来改变颜色
  2. 改变点的顺序来命名角度(通常在角 ABC 中,B 是原点...)
  3. 自动化标签定位。

标记角度

以下是代码:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections} 

\newcommand\markangle[6][red]{% [color] {X} {origin} {Y} {mark} {radius}
  % filled circle: red by default
  \begin{scope}
    \path[clip] (#2) -- (#3) -- (#4);
    \fill[color=#1,fill opacity=0.5,draw=#1,name path global=circle]
    (#3) circle (#6mm);
  \end{scope}
  % middle calculation
  \path[name path=line one] (#3) -- (#2);
  \path[name path=line two] (#3) -- (#4);
  \path[%
  name intersections={of=line one and circle, by={inter one}},
  name intersections={of=line two and circle, by={inter two}}
  ] (inter one) -- (inter two) coordinate[pos=.5] (middle);
  % bissectrice definition
  \path[%
  name path=bissectrice
  ] (#3) -- (barycentric cs:#3=-1,middle=1.2);
  % put mark
  \path[
  name intersections={of=bissectrice and circle, by={middleArc}}
  ] (#3) -- (middleArc) node[pos=1.3] {#5};
  }

\begin{document}
\begin{tikzpicture}
\coordinate[label=below left:$A$] (A) at (0,0);
\coordinate[label=below right:$B$] (B) at (2,0);
\coordinate[label=above:$C$] (C) at (5,5);

\draw[thick] (B) -- (A) -- (C) -- cycle;

\markangle{A}{B}{C}{$\beta$}{5}
\markangle[blue]{B}{A}{C}{$\alpha$}{6}
\markangle[green]{B}{C}{A}{$\gamma$}{12}
\end{tikzpicture}

\end{document}

如果我们可以将标记的半径作为可选参数传递(例如默认为 5 毫米),那就太好了。因此,\markangle{A}{B}{C}如果我们想使用颜色和标记半径的默认值,或者\markangle[blue, 10]{A}{B}{C}如果我们不想使用默认值,我们都可以使用它。但我认为这是不可能的,因为 a\newcommand只需要可选参数,对吗?

答案4

我已经开发了 2 个我认为可以帮助您的宏:

\newcommand{\Angulo}[7]{
\draw[#1]
    let \p1=($(#3) - (#4)$), \p2=($(#5) - (#4)$),
    \n{aIni}={atan2(\x1,\y1)},
    \n{aFin}={atan2(\x2,\y2)},
    \n{aMed}={0.5*\n{aIni}+0.5*\n{aFin}}
    in ($(#4)!#2 * \longU!(#3)$) arc (\n{aIni}:\n{aFin}:#2 * \longU)
    node at ($(#4) + (\n{aMed}:#2 * \longU)$) [#6] {#7};
}

\newcommand{\AnguloC}[7]{
\draw[#1]
    let \p1=($(#3) - (#4)$), \p2=($(#5) - (#4)$),
    \n{aIni}={atan2(\x1,\y1)},
    \n{aFin}={360+atan2(\x2,\y2)},
    \n{aMed}={0.5*\n{aIni}+0.5*\n{aFin}}
    in ($(#4)!#2 * \longU!(#3)$) arc (\n{aIni}:\n{aFin}:#2 * \longU)
    node at ($(#4) + (\n{aMed}:#2 * \longU)$) [#6] {#7};
}

\begin{tikzpicture}
%      Parameters:
%      \Angulo{drawing style}{radius}{starting point}{center point}{ending point}{text style}{text};
%      You can use coordinates or node names as points.

  \coordinate (nodeCenter) at (0,0);
  \Angulo{blue,->}{1}{10,0}{nodeCenter}{0,10}{above right}{$\alpha$};
  \AnguloC{red,<-}{1}{0,10}{nodeCenter}{10,0}{above right}{$\alpha - 360$};
\end{tikzpicture}

在此处输入图片描述

相关内容