觀察孔洞邊界,不難發現,若是組成孔洞的邊,那麼一條邊只對應乙個三角麵片,通過這個特性可以獲得組成孔洞的所有邊。
1 首先選取組成孔洞的邊中的相鄰兩條,計算夾角。
2 若夾角在0-90度,那麼直接將這兩條邊的端點相連組成新的三角形,為了保證孔洞的完整性,新三角形新加的邊作為孔洞的邊,而另外兩條邊從孔洞中刪去。
3 若夾角在90-180度之間,那麼連線夾角對應的兩條邊的端點構建成新的三角形,計算新生成三角形的外心,用兩條邊的端點以及外心組成兩個新的三角形,將原來兩條邊刪去,將外心和原來兩條邊的端點所構成的邊加入到孔洞的邊中。
4 若夾角大於180度,則不進行處理,繼續尋找另外相鄰邊的夾角。
在獲取孔洞邊界的基礎上,首先找到乙個孔洞邊界的頂點,然後將該頂點與
他間隔兩個點的頂點相連,生成新的邊以及三角形,將三角形的新新邊加入到孔洞邊界中,刪除三角形的其餘兩條邊,依此類推,直到孔洞修補完整,結束。
1 首先根據找到組成孔洞的頂點所對應的最小角度。
2 通過角度對孔洞邊進行排序。
3 連線最小角度對應的兩條邊生成當前邊,並將新生成的三角形加入到三角形集合中,並記錄當前三角形。
4 獲取當前邊的候選點,也就是以當前邊的起點為終點的邊的另外乙個點以及以當前邊的終點為起點的邊的另外的乙個點。
5 將當前邊與候選點構成三角形,計算該三角形與當前三角形之間的二面角以及計算該三角形的面積,選取二面角角度大的候選點(在二面角角度相等的情況下,選擇組成面積大的候選點),更新當前邊以及當前三角形,繼續制行第4個步驟,從孔洞邊界中刪除之前的當前邊。當孔洞邊界的大小小於等於2時退出迴圈。
//孔洞修補
void holerepair::repaithole(vector active)
mypoint temp;
//cedge e1(active[0].endnode, active[0].startnode);
active[0].tostring();
active[1].tostring();
clist.push_back(active[0]);
clist.push_back(active[1]);
angle=getanglerear(active[0], active[1]);//計算表頭的邊和它的下一條邊的夾角
cout << "角度之前: " << angle << endl;
if (angle > 180)
cout <
else break;
//std::cout << "活動邊大小 :" <= 90 && angle < 180)
else break;
//std::cout << "活動邊大小 :" << active.size() << std::endl;
} else if (angle < 360 && angle >= 180)
else break;
//std::cout <
} if (i >60)
break;
i++;
}int i1 = 0;
for (auto it = sortedge.begin();it != sortedge.end();it++)
cout startnode.z);
pcl::pointxyz p1(it->endnode.x, it->endnode.y, it->endnode.z);
viewer->addline(p0, p1, 1, 0, 0, std::to_string(i1));
i1++;
}for (auto it = clist.begin();it != clist.end();it++)
/*for (auto it = ********slist.begin();it != ********slist.end();it++)
*/cout << "面: "/ 直接連線
void holerepair::repairline()
else }
int i1 = 0;
for (auto it = sortedge.begin();it != sortedge.end();it++)
for (auto it = list.begin();it != list.end();it++)
void holerepair::holereoairliepa()
}cout << "最小角" << angle <0)
if (list2[1] * list3[1] > 0)
// 種子法向量
if (a > b)
else
} while (active.size() > 2);
/*c********s ctlast(active[0].startnode, active[0].endnode, active[1].endnode);
********slist.push_back(ctlast);*/
int i1 = 0;
for (auto it = sortedge.begin();it != sortedge.end();it++)
cout << "生成多少條邊數: " << listresult.size() << endl;
for (auto it = listresult.begin();it != listresult.end();it++)
新增三角片演算法
直接連演算法
基於liepa演算法
點雲孔洞定位 孔洞修補研究總結
本人最近需要研究三維模型的孔洞修補演算法,故上網看了一些大神寫的資料,現彙總如下 重建骨骼比較典型的方法有 用徑向基函式從不完整的掃瞄資料生成連續網格 基於ct等值面資料生成曲面 用傅利葉級數擬合ct影象提取邊緣輪廓曲線 基於形狀的利用數學形態學運算元進行骨架提取的插值演算法。所謂網格曲面孔洞修補問...
填充 孔洞 電纜貫穿口孔洞防火防水的封堵
電纜貫穿口孔洞防火防水的封堵。針對於這個問題,株洲完全科技的技術人員表示 應根據不同的貫穿物型別 電纜填充佔孔洞空間比例 被貫穿物型別 混凝土樓板,混凝土 砌塊 輕質防火分隔牆體 被貫穿物的形狀和表面光滑情況 環形間隙大小 貫穿孔口大小以及環境條件 如管內是否有滲水,雜質 等,選用不同的防火防水封堵...
怎樣修補漁網 漁網修補的方法
漁網作為水產作業中非常重要的一部分,常在海浬或者河裡泡著,又和魚兒蝦公尺螃蟹親密接觸,時間一長很容易出現損壞,這時就需要進行漁網修補了。漁網修補,是指用相同規格的漁網線對網片進行修補。漁網廠商和漁民,最常接觸的技術就是 補網 了。對漁網廠商來說,在國內,不論是有結網還是無結網,在漁網織造過程中 國家...