tikz 中节点的自动(计算)位置

tikz 中节点的自动(计算)位置

假设我有以下三角形,这是一个非常标准的图形:

\documentclass[border=3pt]{standalone}

\usepackage[ngerman]{babel}
\usepackage{tikz}

\usetikzlibrary{angles,quotes,babel}

\begin{document}
    \begin{tikzpicture}%
        \draw[thick,xshift=6cm] (0,0) coordinate(A) node[below left] {$\mathrm{A^{\prime}}$}
        -- (0:5cm) coordinate(B) node[pos=0.5, below] {$\mathrm{c^{\prime}}$} node[below right] {$\mathrm{B^{\prime}}$}
        -- (40:5cm) coordinate(C) node[pos=0.5, right] {$\mathrm{a^{\prime}}$} node[above] {$\mathrm{C^{\prime}}$}
        -- cycle node[pos=0.5,above left] {$\mathrm{b^{\prime}}$}
        pic["$\beta^\prime$",draw,thin,angle radius=0.5cm,angle eccentricity=1.3] {angle=C--B--A}
        pic["$\gamma^\prime$",draw,thin,angle radius=0.5cm,angle eccentricity=1.45] {angle=A--C--B}
        pic["$\alpha^\prime$",draw,thin,angle radius=0.5cm,angle eccentricity=1.5] {angle=B--A--C}
        ;
    \end{tikzpicture}
\end{document}

我手动放置了节点,但问题是,如果我旋转图形,则必须手动调整它们。如果我[rotate=180]在后面添加,情况会变得多么糟糕,下面就是一个例子\begin{tikzpicture}

我阅读了手册中有关节点的整个部分,但没有找到答案:

  1. 对于边标签,有没有办法告诉TikZ它总是将节点放置在中间(pos=0.5,但更多是“真正的 0.5”),特别是告诉它将其放置在距离线中间 x pt(或 mm)的方向上,垂直于线段?

  2. 对于顶点标签,有没有办法TikZ将节点从顶点放置 x pt(或 mm)在该顶点的角度平分线上?

如果有这样的方法,可能还需要手动“交换”位置(当图形上下颠倒时),但这种几何图形总是看起来很漂亮。

答案1

作为@SebGlav 答案(+1)的补充,大部分都是题外话:

  • 用来标记边的引号
  • 边缘标签位于边缘上(使用倾斜选项)
  • 定义角度标签的通用样式
  • 图片中的所有数学变量均由
\everymath=\expandafter{\the\everymath\mathrm}
  • 代替^#{prime}使用'
\documentclass[tikz, border=3pt]{standalone}
\usepackage[ngerman]{babel}
\usetikzlibrary{angles,
                calc,
                quotes,
                babel}
\tikzset{
Angle/.style = {draw, font=\footnotesize,
                angle radius=5mm,
                angle eccentricity=1.45},
every edge quotes/.style ={auto=right, rounded corners=5pt, inner sep=2pt},
        }


\begin{document}
    \begin{tikzpicture}
\everymath=\expandafter{\the\everymath\mathrm}
%
\draw[thick]    (0,0) coordinate (A)    to["$c'$"]   coordinate (c)
                (5,1) coordinate (B)    to["$a'$"]     coordinate (a)
                (2,3) coordinate (C)    to["$a'$"]     coordinate (b)
                cycle;
\path   pic[Angle, "$\beta'$"]  {angle=C--B--A}
        pic[Angle, "$\gamma'$"] {angle=A--C--B}
        pic[Angle, "$\alpha^\prime$"] {angle=B--A--C};
\path   (A) -- ($(A)!3mm!180:(a)$) node {A}
        (B) -- ($(B)!3mm!180:(b)$) node {B}
        (C) -- ($(C)!3mm!180:(c)$) node {C};
    \end{tikzpicture}

    \begin{tikzpicture}[rotate=45]
\everymath=\expandafter{\the\everymath\mathrm}
%
\draw[thick]    (0,0) coordinate (A)    to["$c'$"]   coordinate (c)
                (5,1) coordinate (B)    to["$a'$"]     coordinate (a)
                (2,3) coordinate (C)    to["$a'$"]     coordinate (b)
                cycle;
\path   pic[Angle, "$\beta^\prime$"]  {angle=C--B--A}
        pic[Angle, "$\gamma^\prime$"] {angle=A--C--B}
        pic[Angle, "$\alpha^\prime$"] {angle=B--A--C};
\path   (A) -- ($(A)!3mm!180:(a)$) node {A}
        (B) -- ($(B)!3mm!180:(b)$) node {B}
        (C) -- ($(C)!3mm!180:(c)$) node {C};
    \end{tikzpicture}
\end{document}

第一个例子:

在此处输入图片描述

第二个示例:第一个示例旋转了 45 度

在此处输入图片描述

答案2

这是一种实现此目的的方法,使用calc边标签和angles,quotes顶点标签(类似于绘制内角时使用的标签)。

无论旋转角度如何,其都应保持正确位置。

\documentclass[tikz,border=3.14mm]{standalone}

\usetikzlibrary{calc,angles,quotes}

\begin{document}
    \begin{tikzpicture}[rotate=0]
        \coordinate (A) at (0,0);
        \coordinate (B) at (5,2);
        \coordinate (C) at (3,5);
        
        \draw (A) -- (B) coordinate[midway] (C') -- (C) coordinate[midway] (A') -- (A) coordinate[midway] (B') -- cycle
            pic["$A$",angle radius=15pt] {angle=C--A--B}
            pic["$B$",angle radius=15pt] {angle=A--B--C}
            pic["$C$",angle radius=15pt] {angle=B--C--A};
        
        \node (lbl_a) at ($(A')!10pt!-90:(C)$) {a};
        \node (lbl_b) at ($(B')!10pt!-90:(A)$) {b};
        \node (lbl_c) at ($(C')!10pt!-90:(B)$) {c}; 
    \end{tikzpicture}
\end{document}

旋转 = 0

旋转=0

旋转 = -30

旋转=-30

旋转 = -60

旋转=-60

相关内容