我正在尝试将一条边连接到一个目标点偏离中心的节点。我希望这条边以箭头结束于节点的边界,而不是进入框内。
将边连接到节点的一侧很容易:
\begin{tikzpicture}
\node (x) [draw,minimum size=1 cm] at (0,0) {x};
\node (y) [draw,minimum size=1 cm] at (2 cm,2 cm) {y};
\draw[->] (x) -- (y.west);
\end{tikzpicture}
但是绘制到和的中间位置(x)
会(x.west)
继续进入节点而不是停在边界:
\begin{tikzpicture}
\node (x) [draw,minimum size=1 cm] at (0,0) {x};
\node (y) [draw,minimum size=1 cm] at (2 cm,2 cm) {y};
\draw[->] (x) -- ($ (y.west)!0.5!(y) $);
\end{tikzpicture}
我怎样才能制作一条具有相同角度的边,(x) -- ($ (y.west)!0.5!(y) $)
但它却在边界上绘制箭头而不是进入节点?
答案1
使用 TikZ 库,intersections
您可以轻松找到节点矩形上的点。
我们给y
节点一个路径名:yborder
。
我们使用一个\path
命令获取从(x)
到 的路径($ (y.west)!0.5!(y) $)
并将其命名为xyline
。
我们name intersections={of=yborder and xyline}
得到名为intersections-1
、intersections-2
、...的坐标
。在我们的例子中,只有一个交点,所以intersection-1
就这样。
(PGF/TikZ 手册展示了如何处理具有多个命中的路径交叉点。)
代码
\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}[every node/.style={draw,minimum size=1 cm}]
\node (x) at (0cm,0cm) {x};
\node [name path=yborder] (y) at (2cm,2cm) {y};
\path [name path=xyline ] (x) -- ($ (y.west)!0.5!(y) $);
\fill [red] ($(y.west)!0.5!(y)$) circle[radius=1pt]; % Where's my point?
\draw [name intersections={of=yborder and xyline},->]
(x) -- (intersection-1);
\end{tikzpicture}
\begin{tikzpicture}[every node/.style={circle,draw,minimum size=1 cm}]
\node (x) at (0cm,0cm) {x};
\node [name path=yborder] (y) at (2cm,2cm) {y};
\path [name path=xyline ] (x) -- ($ (y.west)!0.5!(y) $);
\fill [red] ($(y.west)!0.5!(y)$) circle[radius=1pt]; % Where's my point?
\draw [name intersections={of=yborder and xyline},->]
(x) -- (intersection-1);
\end{tikzpicture}
\end{document}
输出
答案2
您可以使用shorten
:
\draw[->,shorten >=10pt] (x) -- ($ (y.west)!0.5!(y) $);
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node (x) [draw,minimum size=1 cm] at (0,0) {x};
\node (y) [draw,minimum size=1 cm] at (2 cm,2 cm) {y};
\draw[->] (x) -- (y.west);
\end{tikzpicture}
\begin{tikzpicture}
\node (x) [draw,minimum size=1 cm] at (0,0) {x};
\node (y) [draw,minimum size=1 cm] at (2 cm,2 cm) {y};
\draw[->,shorten >=10pt] (x) -- ($ (y.west)!0.5!(y) $);
\end{tikzpicture}
\end{document}