通常我們需要估計平面的方向,這就需要用到法線了,法線就是指垂直平面的線。
pcl中有自動求出法線的方法,我們來看一看,
首先假設我們有乙個平面的點雲cloud_xyz
要求出法線首先我們先定義乙個法線估計的物件ne
pcl::normalestimationne;
然後把要求的平面點雲傳給他
ne. setinputcloud (cloud_xyz);
這個方法求出cloud_xyz上每個點的法線方向,他是根據每個點附近的點雲組成的平面求出的,所以我們需要設定乙個半徑,用來估計附近多大的範圍取點來算平面,
ne. setradiussearch (
0.05);
最後定義乙個normal的物件來接受計算出來的法線
pcl::pointcloud::
ptrcloud_normals (
new pcl::pointcloud);
計算並把結果儲存在cloud_normals裡
ne. compute (*cloud_normals);
這時算出來的法線就在這個物件裡了,他裡面的元素是和點雲一一對應的,我們要訪問每個點的法線方向,可以這樣
for(
int ix=
0;ixpoints.
size();ix++)
} 這裡的isnan是判斷法線是否為nan,因為如果乙個點周圍找不到足夠的點計算平面,則法線中會賦值為nan,如果需要直接當作數字來用的同學們一定要注意這一點,使用我這種方法來判斷。normal_x就是法線的x方向了,y z同理。然後pcl算出的法線是不知道正方向的,所以這點需要人為去判斷正負。
三角形 平面法線 頂點法線
在direct3d中,三角形是構成實體的基本單位,因為乙個三角形正好是乙個平面,以三角形面為單位進行渲染效率最高。乙個三角形由三個點構成,習慣上把這些點稱為頂點 vertex 三角形平面有正反面之分,由頂點的排序決定 頂點按順時針排列的表面是正面,如圖。其中與三角形平面垂直 且指向正面的向量稱為該平...
三角形 平面法線 頂點法線
在direct3d中,三角形是構成實體的基本單位,因為乙個三角形正好是乙個平面,以三角形面為單位進行渲染效率最高。乙個三角形由三個點構成,習慣上把這些點稱為頂點 vertex 三角形平面有正反面之分,由頂點的排序決定 頂點按順時針排列的表面是正面,如圖。其中與三角形平面垂直 且指向正面的向量稱為該平...
已知三點求平面方程 平面法向量和點到平面的距離
已知三點p1 x1,y1,z1 p2 x2,y2,z2 p3 x3,y3,z3 要求確定的平面方程 關鍵在於求出平面的乙個法向量,為此做向量p1p2 x2 x1,y2 y1,z2 z1 p1p3 x3 x1,y3 y1,z3 z1 平面法線和這兩個向量垂直,因此法向量n 平面方程 a x x1 b ...