-3

我想知道在 3D 中找到任意形状中心的准确方法。在图中,我已经解释了 3 个案例。

  1. 在第一种情况下,我们如何计算任意点的中心?一种想法是所有点的总和除以点的总数。它是唯一的方法吗?它准确吗?

  2. 第二个是如何计算 3D 中不规则任意形状的近似中心?这与 1 的情况相同吗?

  3. 我们如何计算由任意顶点组成的弯曲/弯曲管的中心线?对于这个问题,我们必须解决我认为的前两种情况?

在此处输入图像描述

4

1 回答 1

6

解决方案实际上取决于您实际在寻找什么。

如果您寻求一个形状中所有点的平均位置,那么对它们进行平均确实可以为您提供。但它可能与您直观地说“在中间”的点相去甚远。例如,考虑一个盒子,其中一侧的顶点数是另一侧的两倍。平均位置将在该边的一半,而不是在盒子的中间。

更有可能的是,我会说您正在寻找通过计算每个维度中的最大和最小边界然后对两者进行平均来定义的点。因为您使用 C++ 标记了它,所以这里有一些示例代码:

// Define max and min
double max[DIMENSIONALITY];
double min[DIMENSIONALITY];

// Init max and min to max and min acceptable values here. (see numeric_limits)

// Find max and min bounds
for(size_t v_i = 0; v_i < num_vertices; ++v_i)
{
    for(int dim = 0; dim < DIMENSIONALITY; ++dim)
    {
        if(shape[v_i][dim] < min[dim]) min[dim] = shape[v_i][dim];
        if(shape[v_i][dim] > max[dim]) max[dim] = shape[v_i][dim];
    }
}

// Calculate middle
double middle[DIMENSIONALITY];
for(int dim = 0; dim < DIMENSIONALITY; ++dim) 
    middle[dim] = 0.5 * (max[dim] + min[dim]);

对于任何一种解决方案,问题的维度都无关紧要。

编辑: 正如下面的评论所指出的,这可能会导致中间点位于形状本身之外。如果您需要一个位于形状内部的点,则必须使用另一种方法。一个简单的解决方案可能是在每个轴上使用光线行进。

于 2012-12-04T08:24:15.573 回答