-3

3Dで任意の形状の中心を見つける正確な方法を知りたい。図では、3つのケースを説明しました。

  1. 最初のケースでは、どのようにして任意の点の中心を計算できますか?1つのアイデアは、すべてのポイントの合計をポイントの総数で割ったものです。それが唯一の方法であり、正確ですか?

  2. 2つ目は、不規則な任意の形状のおおよその中心を3Dで計算する方法です。これは1の場合と同じですか?

  3. 任意の頂点で構成される曲がった/曲がったチューブの中心線をどのように計算できますか?この問題については、最初の2つのケースを解決する必要があります。

ここに画像の説明を入力してください

4

1 に答える 1

6

解決策は本当にあなたが実際に探しているものに依存します。

シェイプ内のすべてのポイントの平均位置を求める場合、それらを平均すると実際にそれが得られます。しかし、それはあなたが直感的に「真ん中」であると言うポイントから遠く離れている可能性があります。たとえば、片側に反対側の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]);

どちらの解決策でも、問題の次元は重要ではありません。

編集: 以下のコメントで指摘されているように、これにより、形状自体の外側にある中間点が生じる可能性があります。形状の内側にあるポイントが必要な場合は、別のアプローチを使用する必要があります。簡単な解決策は、各軸にレイマーチングを使用することです。

于 2012-12-04T08:24:15.573 に答える