アイデアをグリッド化MAP
最初のステップ:シード三角形を初期化します。(ランダム点、第二の点に近い点に基づいて検索を選択し、第三の探索点に基づいて、線分の中点付近)
図1
ステップ2:シード三角形に基づいて、パッチを増補は、辺の中点を使用した検索に近づいている、右のスポットを打つ、それはこの辺で新しい三角形の面を構成する、と2を構築新しいエッジ。以下のように...キューは、もはやこれまでに取得した外部の途中提供条件を満たしているまで。
第三工程:第二工程を新しいシード三角形を見つけるために、それはもはや適切なシード三角形を見つけることができないまで、ループを終了します。
ステップ4:三角形の面を生成することをさらに含む、出力メッシュ、元のポイントクラウド。
図2
メインアルゴリズム:
用は(size_t i = 0 ; I <NUM; I + = 10 ) { 場合(point_vect [I] .size()> 0 ) { 続けます。 } 点種searchPoint = cloud_ptr-> 点[i]は、 initializeTriangle(searchPoint)。 // 第一步初始化一个种子三角面 しばらく(真) { 場合(edge_queue.empty()) { // はstd :: coutの<< "MPA :: initializeTriangle()が失敗した..." <<はstd :: ENDL ; 破ります; } PCTTM_Edge search_edge= edge_queue.front()。 ブール bad_edge = 偽; 用は(size_t i = 0 ; I <point_vect [search_edge.p_index_first] .size()iは++ ) { 場合(point_vect [search_edge.p_index_first] [I] .p_index == search_edge.p_index_end && point_vect [search_edge.p_index_first] [I ] .ptp_relation == 2 ) { bad_edge = 真。 } } もし(bad_edge) { edge_queue.pop()。 続行; } searchPointMPA(search_edge、5。); // 第二段階拡張エッジ点探索 edge_queue.pop(); } }
結果を実現:
構築する17万ポイント、と327000表面、現在の時刻を26.774秒。