多点/坐标/质量的中心

多点/坐标/质量的中心

这个问题重心答案有很多种。如果我们有坐标 (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有效,而\pwith \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}

在此处输入图片描述

相关内容