max*_*yne -3 c++ opengl math 3d computational-geometry
我想知道在3D中找到任意形状中心的准确方法.在图中,我已经解释了3个案例.
在第一种情况下,我们如何计算任意点的中心?一个想法是所有点的总和除以总点数.这是唯一的方法,它是否准确?
第二是如何计算3D中不规则任意形状的近似中心?这是1的相同情况吗?
我们如何计算由任意顶点组成的弯曲/弯曲管的中心线?对于这个问题,我们必须先解决两个案例吗?

解决方案实际上取决于您实际需要的内容.
如果你在一个形状中寻找所有点的平均位置,那么平均它们确实会给你这个.但是,你可以直截了当地说"在中间".例如,考虑一个框,其中一边的顶点是对面的两倍.平均位置将在该侧的一半,而不是在盒子的中间.
更有可能的是,我会说你正在寻找通过计算每个维度的最大和最小边界定义的点,然后对这两个维度进行平均.因为你用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]);
Run Code Online (Sandbox Code Playgroud)
对于任何一种解决方案,问题的维度都无关紧要.
编辑: 正如下面的评论所指出的,这可能会导致中间点位于形状本身之外.如果您需要一个位于形状内的点,则必须使用替代方法.一个简单的解决方案是在每个轴上使用光线行进.
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |