tikz calc 中的替换

tikz calc 中的替换

在此示例中

\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \coordinate (a) at (0, 0);
  \coordinate (b) at (1, 1);
  \coordinate (c) at ($(a) + (b)$);
  \coordinate (d) at ($(a)!0.5!(c)$);
  \end{tikzpicture}
\end{document}

可以\coordinate(c)通过定义\coordinate(d)为来消除

\coordinate (d) at ($(a)!0.5!((a) + (b))$);

这种替代不起作用:

! Package pgf Error: No shape named (a is known.

如何重写 的表达式\coordinate(d)而不重复\coordinate(c)

答案1

您可以使用:

\coordinate (d) at ($(a)!0.5!($(a) + (b)$)$);

下面第一张图片使用

  \coordinate (c) at ($(a) + (b)$);
  \coordinate (d) at ($(a)!0.5!(c)$);

而第二种方法使用上面提到的计算,不需要中间(c)坐标。

在此处输入图片描述

代码:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \coordinate (a) at (0, 0);
  \coordinate (b) at (1, 1);
  
  \coordinate (c) at ($(a) + (b)$);
  \coordinate (d) at ($(a)!0.5!(c)$);
    
  \node at (a) {a};
  \node at (b) {b};
  
  \node at (d) {d};
\end{tikzpicture}
\begin{tikzpicture}
  \coordinate (a) at (0, 0);
  \coordinate (b) at (1, 1);
  
  \coordinate (d) at ($(a)!0.5!($(a) + (b)$)$);
  
  \node at (a) {a};
  \node at (b) {b};
  
  \node at (d) {d};
  \end{tikzpicture}
\end{document}

答案2

一个小评论:因为0.5 a + 0.5 ( a + b ) =a + 0.5 b,你也可以这样做

\documentclass[tikz,border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \coordinate (a) at (0, 0);
  \coordinate (b) at (1, 1);
  \coordinate (d) at ($1*(a)+0.5*(b)$);
  \foreach \X in {a,b,d}
  \node at (\X){\X};
  \end{tikzpicture}
\end{document}

在此处输入图片描述

也就是说,calc允许您对坐标进行任意线性组合。

相关内容