在 TikZ 中使用 let 命令,但希望稍后也能引用新的点

在 TikZ 中使用 let 命令,但希望稍后也能引用新的点

我开始使用 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}

高级坐标计算:

如果您所做的只是添加/减去坐标,上述方法非常有效。但是,如果您想应用更一般的变换,我们需要访问单个xy坐标。为此,let语法很有用。

例如,为了计算注释中指出的我们希望C位于xy坐标的某个倍数的情况,我们可以使用:

\path let \p1=(B) in coordinate (C) at (4*\x1,5*\y1);

相关内容