如何使用 TikZ 绘制三角形作为五边形的一部分

如何使用 TikZ 绘制三角形作为五边形的一部分

我有一个使用 TikZ 的正多边形,如下所示:

\begin{tikzpicture}
    \node[regular polygon, regular polygon sides=5, shape border rotate=-18, fill=blue!20, minimum size=5cm, thick, draw] (Funfeck) {};
    \coordinate (P1) at (Funfeck.corner 1);
    \coordinate (P2) at (Funfeck.corner 2);
    \coordinate (P3) at (Funfeck.corner 3);
    \coordinate (P4) at (Funfeck.corner 4);
    \coordinate (P5) at (Funfeck.corner 5);
    ...
\end{tikzpicture}

它看起来像这样:Pentagon

在另一个地方,我想要一个由点P5P1和组成的三角形P2

它看起来应该是这样的:The Triangle,因此文档中这些多边形所在的部分应如下所示:The document 该代码将是这样的:

\draw (P5) -- (P1) -- (P2) -- (P5) -- cycle;

但是,由于此代码位于完全不同的地方,此代码位于不同位置tikzpicture,因此我无法访问坐标。

现在,我有四点解决建议:

首先:(我最喜欢的)我不用画五边形就可以得到这些坐标。这样做的好处是,如果我下次遇到同样的问题,我就不需要在其他地方画这个图形了。
就像这样:

\coordinate (P1) at (\node[regular polygon, regular polygon sides=5, shape border rotate=-18, minimum size=5cm].corner 1);
\coordinate (P2) at (\node[regular polygon, regular polygon sides=5, shape border rotate=-18, minimum size=5cm].corner 1);
\coordinate (P5) at (\node[regular polygon, regular polygon sides=5, shape border rotate=-18, minimum size=5cm].corner 1);
\draw (P5) -- (P1) -- (P2) -- (P5) -- cycle;

第二:另一种可能性是从另一个中获取坐标tikzpicture
我的意思是这样的:

\coordinate (P1) at (tikzpicture[0].coordinate.P1);
\coordinate (P2) at (tikzpicture[0].coordinate.P2);
\coordinate (P5) at (tikzpicture[0].coordinate.P5);
\draw (P5) -- (P1) -- (P2) -- (P5) -- cycle;

第三:另一个解决方案,我一直在争论的是绘制多边形,获取坐标,然后删除多边形。事实上,我可以在不带draw和 的情况下创建节点fill=blue!20,但这样仍然会有一个空白。
我的意思是这样的:

\node[regular polygon, regular polygon sides=5, shape border rotate=-18, minimum size=5cm, draw] (Funfeck) {};
\coordinate (P1) at (Funfeck.corner 1);
\coordinate (P2) at (Funfeck.corner 2);
\coordinate (P3) at (Funfeck.corner 3);
\coordinate (P4) at (Funfeck.corner 4);
\coordinate (P5) at (Funfeck.corner 5);
\remove {Funfeck}
\draw (P5) -- (P1) -- (P2) -- (P5) -- cycle;

第四:如果其他方法都行不通,最糟糕的解决方案就是打印坐标并手动插入它们3。但我甚至还没有找到这样做的方法:
我的伪代码是:

\begin{tikzpicture}
    \node[regular polygon, regular polygon sides=5, shape border rotate=-18, fill=blue!20, minimum size=5cm, thick, draw] (Funfeck) {};
    \coordinate (P1) at (Funfeck.corner 1);
    \coordinate (P2) at (Funfeck.corner 2);
    \coordinate (P3) at (Funfeck.corner 3);
    \print("P1, x: "+P1.X+" .P1, y: "+P1.Y);
    \print("P2, x: "+P2.X+" .P2, y: "+P2.Y);
    \print("P3, x: "+P3.X+" .P3, y: "+P3.Y);
    ...
\end{tikzpicture}

...

\coordinate (P1) at (manually inserted, manually inserted);
\coordinate (P2) at (manually inserted, manually inserted);
\coordinate (P3) at (manually inserted, manually inserted);

有人能告诉我如何解决这个问题吗?
非常感谢:)。

答案1

您可以使用overlay选项node,那么它将不会被考虑用于边界框的计算。

或者,使用极坐标计算坐标。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}
\node[
   regular polygon,
   regular polygon sides=5,
   shape border rotate=-18,
   minimum size=5cm, 
   overlay % overlay option means the node isn't included in the calculation of the bounding box
] (P) {};

\draw (P.corner 5) -- (P.corner 1) -- (P.corner 2) -- cycle;

% or do as you did, and make new coordinates
%\coordinate (P1) at (Funfeck.corner 1);
%\coordinate (P2) at (Funfeck.corner 2);
%\coordinate (P3) at (Funfeck.corner 3);
%\coordinate (P4) at (Funfeck.corner 4);
%\coordinate (P5) at (Funfeck.corner 5);
%\draw (P5) -- (P1) -- (P2) -- cycle;
\end{tikzpicture}


% example using polar coordinates
\begin{tikzpicture}
\foreach \N in {1,...,5}
  \coordinate (P\N) at ({360/5*(\N-1)+90-18}:2.5cm);

\draw (P1) -- (P2) -- (P5) -- cycle;
\end{tikzpicture}
\end{document}

第二个版本可以通过定义宏来概括。灵感来自 Ryan Reich 对如何创建带有键值的命令?,下面的代码显示了一种可能的实现。

单独使用时,将通过\myregpolygon定义坐标,表示一个正五边形,其“半径”为 1cm,以点 为中心,第一个点的角度为零。这些参数中的每一个都可以使用宏的可选参数中的键值对进行修改:P1P5(0,0)

\myregpolygon[% 
  radius=3cm, % radius of circumscribed circle
  origin={(3,2)}, % center point
  start angle=90, % angle of first coordinate
  name=Q, % prefix for coordinate names
  sides=4 % sides for the polygon
]

当然,没必要一下子重新定义一切。

\documentclass[border=5mm]{standalone}
\usepackage{tikz}

\pgfkeys{
  regpoly/.is family,
  /regpoly,
  default/.style={
     radius=1cm,
     start angle=0,
     origin={(0,0)},
     sides={5},
     name={P}
  },
  radius/.estore in=\RPradius,
  start angle/.estore in=\RPstartangle,
  origin/.estore in=\RPorigin,
  sides/.estore in=\RPsides,
  name/.estore in=\RPname,
}

\newcommand\myregpolygon[1][]{
\pgfkeys{/regpoly,default, #1}
\foreach \N in {1,...,\RPsides}
   \coordinate [shift=\RPorigin] (\RPname\N) at ({360/\RPsides*(\N-1)+\RPstartangle}:\RPradius);
}
\begin{document}
\begin{tikzpicture}

\myregpolygon[start angle=72,radius=2.5cm]

\draw (P1) -- (P2) -- (P5) -- cycle;
\end{tikzpicture}
\end{document}

相关内容