TikZ:仅绘制给定路径的某个中心长度

TikZ:仅绘制给定路径的某个中心长度

我有两个节点 (A) 和 (B),我想只绘制它们之间直线的中心段,长度为给定的某个值(比如 2cm,但会有所不同)。有什么方法可以做到这一点?我保证 (A) 和 (B) 之间的距离至少为 2cm。

我知道缩短 < 和缩短 >,但问题是我不知道要缩短的确切数量,而且我不想每次都自己计算。

答案1

我没有仔细看问题,以为你想画出任何路径。所以我创建了一个(元)装饰来实现这一点。对于直线,这里给出的其他解决方案当然要简单得多。

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

% A simple empty decoration, that is used to ignore the last bit of the path
\pgfdeclaredecoration{ignore}{final}
{
\state{final}{}
}

% Declare the actual decoration.
\pgfdeclaremetadecoration{middle}{initial}{
    \state{initial}[
        width={(\pgfmetadecoratedpathlength - \the\pgfdecorationsegmentlength)/2},
        next state=middle
    ]
    {\decoration{moveto}}

    \state{middle}[
        width={\the\pgfdecorationsegmentlength},
        next state=final
    ]
    {\decoration{curveto}}

    \state{final}
    {\decoration{ignore}}
}

% Create a key for easy access to the decoration (as suggested by Jake).
\tikzset{middle segment/.style={decoration={middle},decorate, segment length=#1}}

\begin{document}
\begin{tikzpicture}[radius=2pt]   
    \fill (0,0) circle;
    \fill (4,0) circle;
    \draw[middle segment=2cm,double,red,->] (0,0) to[out=30,in=150] (4,0);
\end{tikzpicture}
\end{document}

例子

答案2

图书馆calc把这种东西当早餐吃。

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

\begin{document}
\begin{tikzpicture}
\node (a) at (0,0) {A};
\node (b) at (3,3) {B};
\draw ($($(a)!.5!(b)$)!1cm!(a)$) --  ($($(a)!.5!(b)$)!1cm!(b)$);
\end{tikzpicture}
\end{document}

语法如下:$...$被解释为“坐标计算”,它返回一个坐标。我们从 开始,$(a)!.5!(b)$它位于(a)和 的中间(b)。然后我们1cm从这个点向移动(a)。这是我们的起点。我们从那里画一条线到 ,但用(b)代替(a)

结果:

中心路径

答案3

与其他答案类似,但也使用交叉点库。

\documentclass{minimal}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{intersections}

\begin{document}

\begin{tikzpicture}
\pgfmathsetmacro{\length}{2}

\coordinate (A) at (0,0) ;
\coordinate (B) at (4,4);

\coordinate (mid) at ($(A)!0.5!(B)$);

\path[name path=line,draw=lightgray] (A) node[left] {$A$} -- (B)  node[right] {$B$};
\path[name path=circle,draw=lightgray] (mid) circle[radius=0.5*\length];

\draw [red, blue,ultra thick, name intersections={of=line and circle}]
(intersection-1) -- (intersection-2);
\end{tikzpicture}

\end{document}

输出为

线

蓝色段的长度由宏的值决定\length

另一种选择是剪辑路径:

\begin{tikzpicture}
\pgfmathsetmacro{\length}{2}

\coordinate[label=left:$A$] (A) at (0,0) ;
\coordinate[label=right:$B$] (B) at (4,4);

\coordinate (mid) at ($(A)!0.5!(B)$);

\begin{scope}
\clip (mid) circle[radius=0.5*\length];
\draw[blue,ultra thick] (A) -- (B);
\end{scope}
\end{tikzpicture}

答案4

那个怎么样?

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

\begin{document}
\begin{tikzpicture}
    % def Points
    \fill (0,0) coordinate (A) circle (1pt) (5,2) coordinate (B) circle (1pt); 
    % two nodes A and B
    \node [below] at (A) {Node A};
    \node [above] at (B) {Node B};
    % line between
    \draw ($(A)!1cm!(B)$) -- ($(A)!3cm!(B)$);
\end{tikzpicture}
\end{document}

首先,我定义两个坐标,绘制它们并添加两个节点。我使用语法⟨p⟩!⟨factor/dimension⟩!⟨q⟩来获取 A 和 B 之间的指定点
。不幸的是,在我的解决方案中,您必须使用两个一角硬币才能获得定义的长度。在这种情况下,3cm - 1cm = 2cm 段长度。

请参阅 PGF 手册,欧几里得教程中的“4.2.1 使用部分计算来构造 D”一节

相关内容