解決策は本当にあなたが実際に探しているものに依存します。
シェイプ内のすべてのポイントの平均位置を求める場合、それらを平均すると実際にそれが得られます。しかし、それはあなたが直感的に「真ん中」であると言うポイントから遠く離れている可能性があります。たとえば、片側に反対側の2倍の頂点があるボックスについて考えてみます。平均的な位置は、ボックスの中央ではなく、その側の半分になります。
おそらく、各次元の最大境界と最小境界を計算し、2つを平均することによって定義されたポイントを探していると思います。これを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]);
どちらの解決策でも、問題の次元は重要ではありません。
編集:
以下のコメントで指摘されているように、これにより、形状自体の外側にある中間点が生じる可能性があります。形状の内側にあるポイントが必要な場合は、別のアプローチを使用する必要があります。簡単な解決策は、各軸にレイマーチングを使用することです。