1. 引言

在本文中,我们将学习如何计算一组环形数据点的平均值。我们会先定义什么是环形数据点,以及它们的平均值是什么样的。随后,我们将讨论在环形数据集中计算平均点的方法。

最终,我们将能够实现一个算法,用于计算一组环形数据点的平均值。

2. 环形数据

如果你正在处理空间数据或开发地理空间应用,这篇文章将非常有用。例如在处理地理围栏多边形时,我们经常需要从一组点中找出一个“中间”点;或者在计算地理空间距离时,需要找到一个到所有点距离总和最小的点。这时,我们就需要找到一组环形数据点的平均值

2.1. 单位圆

一组环形数据点有两个坐标:xy。它们满足勾股定理:x^2 + y^2 = r^2,其中 r 是圆的半径。当 r=1 时,称为单位圆

1

其他任何圆都可以看作是单位圆的放大版。因此,我们只需研究单位圆,其他圆可通过简单缩放得到。

2.2. 用笛卡尔坐标采样单位圆

如果我们想从单位圆上随机采样一些点,构建一个数据集,该如何操作呢?

我们可以随机选择一个 x \in [-1, 1],然后根据勾股定理,y 有两个可能的值:

$$ y_1, y_2 = f(x) = \begin{cases} y_1 = +\sqrt{1-x^2} \ y_2 = -\sqrt{1-x^2} \end{cases} $$

也就是说,对于每一个 x,我们有两个可能的 y 值。我们可以随机选择一个 x,然后抛一枚硬币决定取正还是负。

但注意:不能简单地把两个点都加入数据集,因为这样会破坏点之间的独立性。例如,知道一个点是 P = (x, y_1) 后,就可以推断出另一个点是 P' = (x, -y_1)

2.3. 极坐标表示法

上面的方法需要为每个点生成两个随机数:一个用于 x,一个用于 y 的符号。其实还有更高效的方法:使用极坐标

极坐标中,一个点表示为  (r, \theta) ,其中 r 是半径,\theta 是与 x 轴的夹角。

如果我们要在半径为 r 的圆上随机采样一个点,只需要从 0^\circ360^\circ 均匀分布中随机选取一个角度 \theta,然后使用以下公式转换为笛卡尔坐标:

$$ \begin{cases} x = r \cos(\theta) \ y = r \sin(\theta) \end{cases} $$

这样可以保证点落在圆上,且每次采样只生成一个随机数,效率更高。

3. 计算一组环形数据的平均值

3.1. 普通数据集的平均值

假设我们有一个实数集合 X = \{x_1, x_2, ..., x_n\},它的平均值定义为:

$$ \text{Avg}(X) = \frac{\sum_{i=1}^{n} x_i}{n} $$

3.2. 二维分布的平均值

对于二维数据集  (X, Y) ,其中:

  • X = \{x_1, x_2, ..., x_n\}
  • Y = \{y_1, y_2, ..., y_n\}

我们可以分别计算 XY 的平均值,然后组合成一个二维点:

$$ \text{Avg}(X,Y) = \left( \frac{\sum x_i}{n}, \frac{\sum y_i}{n} \right) $$

3.3. 环形数据集的平均值

对于环形数据集来说,上述方法并不适用。因为环形数据之间存在约束:每个点都必须满足 x^2 + y^2 = r^2。然而,直接对 xy 取平均后,新点可能不再满足该等式。

举个例子:

  • P_1 = (1, 0)
  • P_2 = (-1, 0)

它们都在单位圆上。但它们的笛卡尔平均是:

$$ \left( \frac{1 + (-1)}{2}, \frac{0 + 0}{2} \right) = (0, 0) $$

这个点并不在单位圆上。所以,如果我们希望平均值也落在圆上,就需要使用极坐标来计算平均值

3.4. 平均值也必须在圆上

要让平均值也落在圆上,我们可以将所有点转换为极坐标形式:

  • 每个点表示为  (r, \theta_i)
  • 计算角度的平均值:\overline{\theta} = \frac{\sum \theta_i}{n}
  • 然后转换回笛卡尔坐标:

$$ \begin{cases} \overline{x} = r \cos(\overline{\theta}) \ \overline{y} = r \sin(\overline{\theta}) \end{cases} $$

优点:这个点一定落在半径为 r 的圆上。

4. 实现算法

4.1. 转换为极坐标

我们有一组点:

$$ {P_1, P_2, ..., P_n} = {(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)} $$

假设它们都落在同一个圆上,我们可以先计算半径:

$$ r = \sqrt{x_1^2 + y_1^2} $$

然后,对每个点计算其极角  \theta_i

$$ \theta^\prime = 2 \arctan \frac{y}{x + r} $$

然后根据 xy 的正负,调整角度:

$$ \begin{cases} \theta = \theta^\prime & x \geq 0 \wedge y \geq 0 \ \theta = \pi - \theta^\prime & x < 0 \wedge y \geq 0 \ \theta = \pi + \theta^\prime & x < 0 \wedge y < 0 \ \theta = 2\pi - \theta^\prime & x \geq 0 \wedge y < 0 \ \end{cases} $$

4.2. 计算平均角度

一旦我们有了所有点的角度  \theta_1, \theta_2, ..., \theta_n ,就可以计算平均角度:

$$ \overline{\theta} = \frac{\sum \theta_i}{n} $$

然后将这个角度转换回笛卡尔坐标:

$$ \begin{cases} \overline{x} = r \cos(\overline{\theta}) \ \overline{y} = r \sin(\overline{\theta}) \end{cases} $$

这个点一定落在半径为 r 的圆上。

4.3. 半径不固定的情况

如果点的半径不固定(例如地球表面点,由于地形起伏,半径不完全一致),我们需要同时计算角度和半径的平均值:

  • 对每个点计算 r_i = \sqrt{x_i^2 + y_i^2}
  • 然后计算平均半径  \text{Avg}(r) 和平均角度  \text{Avg}(\theta)
  • 最终平均点为: (\text{Avg}(r), \text{Avg}(\theta))

5. 小结

在本文中,我们学习了如何计算一组环形数据点的平均值:

关键点总结如下

  • 环形数据点满足 x^2 + y^2 = r^2
  • 不能直接对 xy 取平均,否则平均值可能不在圆上
  • 正确做法是:先转换为极坐标,计算平均角度,再转换回笛卡尔坐标
  • 如果半径不固定,还需对半径取平均

这样,我们就能得到一个既符合数据分布、又落在圆上的平均点。


原始标题:Calculating the Average of a Set of Circular Data