这个问题重心答案有很多种。如果我们有坐标 (m1)、(m2)、(m3)、(m4),那么还有一种方法就是写
\documentclass[12pt,parskip=full]{scrartcl}
\usepackage[a4paper,textwidth=24cm,landscape]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (8,5);
\coordinate (m1) at (1,1);
\coordinate (m2) at (7,1);
\coordinate (m3) at (7,4);
\coordinate (m4) at (1,4);
% foreach \x in {1,2,3,4} ?
\draw (m1) circle (3pt);
\draw (m2) circle (3pt);
\draw (m3) circle (3pt);
\draw (m4) circle (3pt);
\draw [fill] ($($($ (m1)!1/2!(m2) $) !1/3! (m3)$) !1/4! (m4)$) circle (5pt);
\end{tikzpicture}
\end{document}
因为 ((1/2 (m1 + m2)) 2/3 + 1/3 m3) 3/4 + 1/4 m4 = 1/4 sum_{i=1}^4 mi。
上面的 tikz 代码如何用语句编写foreach
,特别是如果还有更多点?
答案1
calc
可以使用包和循环来回答这个问题\foreach
,另外还可以观察宏随时间扩展的位置(下面,(\p)
with \p
=1,1
有效,而\p
with \p
=(1,1)
无效)。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (8,5);
\coordinate (m) at (0,0);
\foreach \p [count = \n] in {{1,1}, {7,1}, {7,4}, {1,4}}
{\draw (\p) circle (3pt);
\coordinate (m) at ($(m)+(\p)$);
}
\coordinate (m) at ($1/\n*(m)$);
\draw[fill] (m) circle (5pt);
\end{tikzpicture}
\end{document}
除了对坐标进行求和并在最后缩放总和之外,还可以使用部分运算符,该运算符在每个步骤中都进行缩放。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (8,5);
\coordinate (m) at (0,0);
\foreach \p [count = \n] in {{1,1}, {7,1}, {7,4}, {1,4}}
{\draw (\p) circle (3pt);
\coordinate (m) at ($(m)!1/\n!(\p)$);
}
\draw[fill] (m) circle (5pt);
\end{tikzpicture}
\end{document}