点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 2796|回复: 2

用greedy projection重建曲面后,怎么样求曲面的面积?

[复制链接]
发表于 2013-12-1 21:42:39 | 显示全部楼层 |阅读模式
本帖最后由 just_rookie 于 2013-12-1 21:44 编辑

如题!
下面是我自己写的一段代码,但是错误提示说有逻辑错误,求指教!

//greedy projection;        
pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp;        
pcl::PolygonMesh mesh;        
gp.setInputCloud(pointWithNormal);        
gp.setSearchMethod(tree1);        
gp.setMu(3.20);        
gp.setSearchRadius(20.0);        
gp.setMaximumNearestNeighbors(200);        
gp.setMaximumSurfaceAngle(M_PI);        
gp.setMaximumAngle(3*M_PI/3);        
gp.setMinimumAngle(M_PI/180);        
gp.setNormalConsistency(false);        
gp.reconstruct(mesh);         
//cout<<"The size of polygons is "<<mesh.polygons.size()<<endl;        
//pcl::io::saveVTKFile("potting-reconstruction.vtk",mesh);        
//pcl::io::savePLYFile("potting-reconstruction.ply",mesh);               

//calculate area;        
pcl::PointCloud<pcl::PointXYZ> cloud1;        
cloud1=*cloud;         
int index_p1,index_p2,index_p3;      
float x1,x2,x3,y1,y2,y3,z1,z2,z3,a,b,c,q;        
float area=0;                        
for(int i=0;i<mesh.polygons.size();++i)        
{                  
index_p1=mesh.polygons.vertices[0];                  
index_p2=mesh.polygons.vertices[1];                  
index_p3=mesh.polygons.vertices[2];                  
x1=cloud1.points[index_p1].x;                  
y1=cloud1.points[index_p1].y;                 
z1=cloud1.points[index_p1].z;                  

x2=cloud1.points[index_p2].x;                  
y2=cloud1.points[index_p2].y;                 
z2=cloud1.points[index_p2].z;

x3=cloud1.points[index_p3].x;                 
y3=cloud1.points[index_p3].y;                  
z3=cloud1.points[index_p3].z;                  

a=sqrt(pow((x1-x2),2)+pow((y1-y2),2)+pow((z1-z2),2));                  
b=sqrt(pow((x1-x3),2)+pow((y1-y3),2)+pow((z1-z3),2));                  
c=sqrt(pow((x3-x2),2)+pow((y3-y2),2)+pow((z3-z2),2));                  
q=(a+b+c)/2;                  
area=area+sqrt(q*(q-a)*(q-b)*(q-c));//Heron's formula;        
}        
cout<<area<<endl;
回复

使用道具 举报

 楼主| 发表于 2013-12-2 10:32:00 | 显示全部楼层
我把问题解决了,谢谢关注!
回复 支持 反对

使用道具 举报

发表于 2014-1-10 10:47:11 | 显示全部楼层
你是怎么解决的啊
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-29 08:28 , Processed in 1.858582 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表