我开始使用 TikZ,在理解引用数据点的正确方法时遇到了一些问题,而无需为所有数据点指定精确的绝对位置。我感到困惑的简单情况的一个例子如下:
假设我有 3 个点,A=(ax,ay)
和B=(bx,by)
。C=(bx,by-1)
我想在这些点之间画线,但我还希望它们被标记为 A、B 和 C,以便我以后可以参考它们。如果我简单地定义我的点 A 和 B,如下所示:
\coordinate (A) at (ax,ay);
\coordinate (B) at (bx,by);
那么获得 C 的最佳方法是什么?我应该尝试类似
\coordinate (C) at "some way of referring to B's coordinates and doing math on them"
或者我必须使用一些(看似)笨拙的语句,例如
\coordinate (C) at let \p1 = (B) in (\x1,\y1-1);
似乎最好是选择前一种,但网上关于此类主题的很多答案都集中在使用“let”命令上。然而,我对上述 let 命令的使用是错误的。我还尝试了类似
let \p1 =(B) in \coordinate (C) at (\x1,\y1-1);
但这也不起作用。我还没有看到 let 命令与 \coordinate 结合使用的任何示例,因此不确定语法应该是什么。
所以我的问题是,分配 C 的最佳方法是什么?我可以在使用 \draw 绘制从 A 到 B 到 C 的线时以内联方式定义它,但我认为如果不重新计算,我将无法再次访问 C 坐标。
答案1
基本坐标计算:
您可以使用 tikz 的calc
库来计算坐标,(C)
如下所示:
\coordinate (C) at ($(B) + (0,-1)$);
$
触发计算的使用。
您还可以计算一个坐标到另一个坐标之间的位置。例如,表示从到 的直线上的($(A)!0.5!(B)$)
距离。0.5
(A)
(B)
下面的示例从 到 绘制了一条红线(C)
,并将节点标记为(D)
。 稍后可以引用此点(D)
,如棕色线所示。 请注意,如果您不使用 ,shape=coordinate
则需要使用(D.center)
来访问 的中间部分node
。
参考:
正如 percusse 所建议的,($(B) + (0,-1)$)
也可以不使用 tikz 的calc
库,使用以下shift
选项进行计算:
\coordinate (C) at ([shift={(0,-1)}]B);
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,1);
\coordinate (B) at (2,3);
\coordinate (C) at ($(B) + (0,-1)$);
\draw [thick, blue]
(A) node [black, left ] {A}
-- (B) node [black, right] {B}
-- (C) node [black, right] {C};
\draw [thick, red] (C) -- ($(A)!0.5!(B)$)
node [shape=coordinate] (D) {};
\draw [thick, brown] (D) -- ($(A)!0.5!(C)$);
\end{tikzpicture}
\end{document}
高级坐标计算:
如果您所做的只是添加/减去坐标,上述方法非常有效。但是,如果您想应用更一般的变换,我们需要访问单个x
和y
坐标。为此,let
语法很有用。
例如,为了计算注释中指出的我们希望C
位于x
和y
坐标的某个倍数的情况,我们可以使用:
\path let \p1=(B) in coordinate (C) at (4*\x1,5*\y1);