如何将节点定位在任意路径的中心

如何将节点定位在任意路径的中心
\documentclass{article}

\usepackage{lmodern}
\usepackage{tikz,times}
\usetikzlibrary{positioning}

\begin{document}

\begin{tikzpicture}[scale=.3]
    \draw [thick] (0,6) rectangle (18,4) node [pos=.5] {like this};

    \draw [thick] (0,2) -- (18,2) -- (18,0) -- (0,0) -- cycle;
    %\draw [thick] (0,2) -- (18,2) -- (18,0) -- (0,0) -- cycle node [pos=.5] {A};

    \draw [thick] (0,-3) -- (4, -3) -- (5, -5) -- (-1, -5) -- (3, -4) -- cycle;
    %\draw [thick] (0,-3) -- (4, -3) -- (5, -5) -- (-1, -5) -- (3, -4) -- cycle node [pos=.5] {B};
\end{tikzpicture}
\end{document}

在此文档中,我有三条路径。第一条是一个简单的矩形,其中将节点定位在中心很容易(node [pos=.5] {like this})。但是,当要对任何路径执行此操作时,我都无法做到这一点。

如何获取位于中心的节点。也可以获取位于路径内的节点,尽管这并不那么重要。

答案1

选项pos(或)始终指的是最后两个给定的坐标,即,在以节点结尾的midway路径中,它将位于和之间的线上:(0,0) -- (1,2) -- (3,-1)(1,2)(3,-1)

\documentclass{article}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
    \draw (0,0) -- (1,2) -- (3,-1) node [pos=0.5, fill=red] {x};
\end{tikzpicture}
\end{document}

中心节点

要将节点置于具有更多边的形状的中心,您可以使用提示:创建路径,然后让节点拥有fit其所有坐标(使用fit库)。此节点的内容将位于一个矩形的中心(添加draw=red到节点以查看它),该矩形围绕所有给定的坐标:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{fit}

\begin{document}
\begin{tikzpicture}
    \draw (-1,2) -- (5,2) -- (3,0) -- (0,0) -- cycle;
    \node [fit={(-1,2) (5,2) (3,0) (0,0)}] {x};
\end{tikzpicture}
\end{document}

矩形适配

在某些情况下,可以使用shape库并将尺寸设置为节点,而不是使用坐标。要获得精确的尺寸,请使用inner sep=0pt另外的尺寸,否则尺寸将增加 的值inner sep,默认值为 0.3333em

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\begin{document}
\begin{tikzpicture}
    \node [minimum width=2cm, minimum height=1cm,draw] {x};
    \node at (3,0) [minimum width=2cm, minimum height=1cm,draw,trapezium] {x};
    \node at (6,0) [minimum width=2cm, minimum height=1cm,draw,ellipse] {x};
\end{tikzpicture}
\end{document}

使用节点形状

当你使用一个节点时,甚至可以通过给第一个节点命名来将另一个节点对齐在其上方:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\begin{document}
\begin{tikzpicture}
    \node (my node) [minimum width=2cm, minimum height=1cm,draw] {x};
    \node at (my node) [minimum width=1cm, minimum height=1cm,draw,circle] {X};
\end{tikzpicture}
\end{document}

锚定命名节点

答案2

我尝试做类似的事情并最终发现了这个问题。

但是,如果您的路径是多边形(即由连接点的直线形成),我找到了另一种解决方案:为路径中的每个顶点命名(例如使用coordinate),然后使用重心坐标系并为路径中的每个点创建一个权重为 1 的节点。这就是重心。下面是一个最小的例子。

\documentclass{standalone}
\usepackage{pgf,tikz}
\begin{document}
\begin{tikzpicture}
    \draw(0,0) coordinate (P1) -- (1,2) coordinate(P2) -- (3,-1) coordinate(P3) -- (2,-1) coordinate (P4) -- cycle;%%the cycle here does not affect the position of X.

    \coordinate (center) at (barycentric cs:P1=1,P2=1,P3=1,P4=1) {};
    \node at (center) {X};
\end{tikzpicture}
\end{document}

重心

相关内容