2016-04-05 9 views
0

私は3Dシステムで座標のセットを持っていますが、ポイントはランダムに生成されます。私はenter image description hereの成功の兆候なしで、Room内でのポジションに基づいて注文しようとしています。3D空間内のポイントのセットを注文する

私がしたいことは、らせんのように見える方法を注文することです。

enter image description here

私はらせん曲線を得るために、Xさん、YさんとZさんを注文しようとしたが、結果は、あなたが間違った位置にポイントNrの29を見ることができる画像で、最悪でした!

ここで誰でも私はそれらをどのように注文することができるかについてのヒントを与えることができます。 PS:ポイントのセットは、私が注文の背後に論理を持つ必要があるために変更することができます+私はコードを求めていない!

ありがとうございます!

答えて

1

ここに私の提案があります。これは完璧ではありませんが、おそらくこの問題の完璧な解決策を見つけることはできません:

Z軸をいくつかの間隔に分割します。 [0,4 [、[4,8 [、...

Z座標が属する間隔でポイントを並べ替えます。

各区間内で、ほとんどの言語でatan2(Y,X)で計算できるZ軸回りの回転角でソートします。基本的には、円筒座標を使用しています。

+0

あなたの答えはフランクです!私はこれを試してみよう! – Engine

0
  1. システムに

    を座標あなたは、私はらせん軸があなたの螺旋図に上を向いているZ軸に平行であると仮定し、次のためにどのようにしている軸を指定しませんでした。

  2. ソートZによってポイントがノイズポイントがどのように密集している、そこにある、

  3. 検索らせん軸

    これはトリッキーで、好きな多くのものに依存してあなたの螺旋に偏りがある昇順座標分散された点などがあります。最も簡単な方法は、すべての点(またはちょうどローカル領域)から境界ボックスを取得し、軸がその中央にあることです。あなたはより洗練されたが、

  4. ソートポイントによって参照何かが必要な場合は

    x0=0.5*(xmin+xmax) 
    y0=0.5*(ymin+ymax) 
    z0=<zmin,zmax> 
    

    :バウンディングボックスが(xmin,ymin,zmin,xmax,ymax,zmax)であれば、その後、中心軸がZ軸に垂直な線だろう極角

    したがって、すべての点を処理します。同じZとポイントを見つけるを調整し、今それらを昇順または降順にソート中央(x0,y0)

    a(i)=atan2(y(i)-y0,x(i)-x0) 
    

    の周りに彼らの極角aを計算する(あなたはCW/CCWを必要なものの出力に依存します)。同じZ軸ごとにすべてのポイントをソートすると、全体のセットがらせんの順序になっているはずです。

    あなたのポイントにノイズがある場合は、Zの代わりに同じものを使用してください。そして、順序を調整するために連結成分分析を追加することができる。

関連する問題