嵌套坐标计算

嵌套坐标计算

我有以下坐标计算

\coordinate (a0) at ($(c1)!0.5!(c2)$);
\coordinate (a1) at ($(c3 -| a0) + (1,3)$);
\draw (a1) rectangle (b1);

我想消除第一个坐标并改用此代码

\coordinate (a1) at ($(c3 -| ($(c1)!0.5!(c2)$)) + (1,3)$);
\draw (a1) rectangle (b1);

但它不起作用,即使我在坐标周围加上花括号($(c1)!0.5!(c2)$)。这里有什么问题?

答案1

线路

\coordinate (a1) at ($(c3 -| ($(c1)!0.5!(c2)$)) + (1,3)$);

给出以下错误信息:

Package pgf Error: No shape named `($(c1' is known.

这可以说明发生了什么。请注意以下两件事:

PGF/TikZ 查找的名称以 开头,(并在第一个 之前结束)

事实上,让我们去掉一层,然后尝试

\coordinate (a1) at (c3 -| ($(c1)!0.5!(c2)$));

这给出了相同的错误消息。

这里有两点错误,第一点很简单。当你在perpendicular通过另外两点的线,你不是将它们括在(和中)。你也没有用 来做这件事c3
让我们删除一组括号:

 \coordinate (a1) at (c3 -| $(c1)!0.5!(c2)$);

仍然不起作用:

! Package tikz Error: + or - expected.

l.9 \coordinate (a1) at (c3 -| $(c1)
                                    !0.5!(c2)$);

该消息本身并不是很有帮助,但下一行向我们展示了 TikZ 出错的地方。

当 TikZ 遇到 时,(它会(实际上除了($)抓取直到下一个的所有内容),并假设 是坐标。在这里,它将c3 -| $(c1作为坐标,所有内容都会崩溃。与数学函数)需要向贪婪解析器隐藏:

\coordinate (a1) at (c3 -| {$(c1)!0.5!(c2)$});

事实上这就是全部了,现在可以将其作为坐标和的一个坐标:

\coordinate (a1) at ($(c3 -| {$(c1)!0.5!(c2)$}) + (1,3)$);

当解析器找到时,($它会将坐标解析交给calc库,该库会找到另一个(并将数字的解析交还给 TikZ(它将贪婪地抓取、找到c3并将$(c1)!0.5!(c2)$后者交还给的位置,calc因为$

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (b1) at (rnd, rnd)
 coordinate (c1) at (rnd, rnd)
 coordinate (c2) at (rnd, rnd)
 coordinate (c3) at (rnd, rnd);
\coordinate (a1) at ($(c3 -| {$(c1)!0.5!(c2)$}) + (1,3)$);
% alternatives:
% \coordinate (a1) at ([shift={(1,3)}] c3 -| {$(c1)!0.5!(c2)$});
% \coordinate (a1) at ([shift={(1,3)}] perpendicular cs:
%   horizontal line through = {(c3)},
%   vertical line through   = {($(c1)!0.5!(c2)$)});
\draw (a1) rectangle (b1);
\end{tikzpicture}
\end{document}

相关内容