利用PCL库画简单的三维立体图形需要知道各种图形的参数方程,然后给每个参数赋值便可以。

圆柱面的参数方程为:x = R*cos(θ); y = R*sin(θ); z = z;其中 θ范围是[-2*PI, 2*PI), z的范围是(-∞,+∞)

球面的参数方程是:x = R*sin(θ)*cos(ψ); y = R*sin(θ)*sin(ψ); z = R*cos(θ);其中θ∈[0, PI), ψ∈[0, 2*PI)

下面给出代码:

#include <iostream>
#include <boost/thread/thread.hpp>
#include <pcl/common/common_headers.h>
#include <pcl/features/normal_3d.h>
#include <pcl/io/pcd_io.h>
#include <pcl/visualization/pcl_visualizer.h>
// #include <pcl/console/parse.h>boost::shared_ptr<pcl::visualization::PCLVisualizer> simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
{boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(0.0, 0.0, 0.0);viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1.0, "sample cloud");viewer->addCoordinateSystem(1.0);viewer->initCameraParameters();return viewer;
}//构造圆柱体点云
void ConsCylinderCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr)
{for(float z = -1.0; z <= 1.0; z += 0.05){for (float angle = 0.0; angle <= 360.0; angle += 5.0){pcl::PointXYZ basic_point;basic_point.x = cosf(pcl::deg2rad(angle));basic_point.y = sinf(pcl::deg2rad(angle));basic_point.z = z;basic_cloud_ptr->points.push_back(basic_point);}}basic_cloud_ptr->width = (int)basic_cloud_ptr->points.size();basic_cloud_ptr->height = 1;
}//构造球体点云
void ConsSphereCloud(pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr)
{float radius = 0.2;for (float angle1 = 0.0; angle1 <= 180.0; angle1 += 5.0){for (float angle2 = 0.0; angle2 <= 360.0; angle2 += 5.0){pcl::PointXYZ basic_point;basic_point.x = radius * sinf(pcl::deg2rad(angle1)) * cosf(pcl::deg2rad(angle2));basic_point.y = radius * sinf(pcl::deg2rad(angle1)) * sinf(pcl::deg2rad(angle2));basic_point.z = radius * cosf(pcl::deg2rad(angle1));basic_cloud_ptr->points.push_back(basic_point);}}basic_cloud_ptr->width = (int)basic_cloud_ptr->points.size();basic_cloud_ptr->height = 1;
}int main(int _Argc, char *argv[])
{pcl::PointCloud<pcl::PointXYZ>::Ptr basic_cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZRGB>::Ptr point_cloud_ptr(new pcl::PointCloud<pcl::PointXYZRGB>);#define SPHERE
#if defined CYLINDERConsCylinderCloud(basic_cloud_ptr);
#elif defined SPHEREConsSphereCloud(basic_cloud_ptr);
#endifboost::shared_ptr<pcl::visualization::PCLVisualizer> viewer = simpleVis(basic_cloud_ptr);while ( !viewer->wasStopped()){viewer->spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}return 0;
}

这个是画出的球面。

如果要画出圆柱面,则将代码中的#define SPHERE改为#define CYLINDER,然后编译运行即可显示以xoy平面对称的圆柱面。

以上显示方式是在程序中写死的,也可以将点云保存为文件,
程序中的main函数中稍微修改下,将viewer的代码替换为
ConsSphereCloud(basic_cloud_ptr);pcl::io::savePCDFileASCII("sphere.pcd", *basic_cloud_ptr);
然后在控制台下切换到C:\Program Files (x86)\PCL 1.6.0\bin目录中,再执行
C:\Users\pc>pcd_viewer_release D:\pcl_test\visualizer\cmake-bin\sphere.pcd
The viewer window provides interactive commands; for help, press 'h' or 'H' from within the window.
> Loading D:\pcl_test\visualizer\cmake-bin\sphere.pcd [done, 140 ms : 2701 points]
Available dimensions: x y z
显示的图像如下所示:




利用PCL库做简单的三维立体图形相关推荐

  1. 利用pcl库实现简单单帧障碍物检测

    利用pcl库实现简单单帧障碍物检测 #include <iostream> #include <pcl/common/common_headers.h> #include &l ...

  2. 利用PCL库从点云数据生成深度图像及关键点提取

    利用PCL库从点云数据生成生成深度图像及关键点提取 利用PCL库从点云数据生成深度图像及关键点提取 本想利用标准点云数据库分割成若干块,利用标准点云数据生成深度图像作为数据库用来验证算法,目前效果不是 ...

  3. python rsa 公钥解密_python利用rsa库做公钥解密的方法教程

    前言 对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文.D 和 N 的组合就是私钥(private key). 算法的加密 ...

  4. 利用monment库做一个日历表

    利用monment库做一个日历表 先看完成品 点击上月和下月根据当前系统的时间进行变化 这是布局 <div class="wapper"><div class=& ...

  5. 利用PCL库构建Mesh三维模型

    从两张任意拍摄的一对图像(得有大部分重合面积)和相机内参矩阵开始,重建出基于Mesh的三维模型,美观又实用,还不赶快学起来.本文也是记录一下自己学习过程,废话较多,请多包涵,主要代码已注释,请自行下载 ...

  6. python的turtle怎么画曲线_利用 turtle库绘制简单图形

    turtle库是python的基础绘图库,这个库被介绍为一个最常用的用来介绍编程知识的方法库,其主要是用于程序设计入门,是标准库之一,利用turtle可以制作很多复杂的绘图. turtle名称含义为& ...

  7. Visual C++6.0画三维立体图形

    在画三维立体图之前,主要是先要找到二维和三维的对应关系,这是转化的关键. 关键代码如下: S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);S[i].y=P[i][2]+sq ...

  8. 利用Python Matplotlib库做简单的视觉化(2)

    Matplotlib练习 题目 练习一 方法一(条形图) 方法一效果图 方法二(扇形图) 方法二效果图 练习二 练习二代码 练习二效果图 小结 题目 练习一 方法一(条形图) from matplot ...

  9. 利用Python Matplotlib库做简单的视觉化

    Matplotlib练习 练习一 题目 代码 效果图 练习二 题目 练习1代码 练习1效果图 练习2代码 练习2效果图 小结 练习一 题目 代码 import matplotlib.pyplot as ...

最新文章

  1. python field详解_Django中models Field详解
  2. 测试openssl_encrypt
  3. vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具
  4. mysql float64_'numpy.float64'对象没有属性'translate'在Python中插入值到Mysql
  5. HTML五子棋人人对战源代码,五子棋C++源代码 单机 联机 人机对战 人人对战
  6. Windows核心编程_修改开机密码
  7. 28.go fmt 与 gofmt
  8. 将dataset中的数据 数据库中 java_java-将NoSQLUnit与@ShouldMatchDataSet一起使用时,...
  9. 游戏必备组件有哪些_微信抖音小游戏黄金矿工案例详解
  10. 美团和饿了么分别有什么优势和劣势?
  11. @loj - 2339@ 「WC2018」通道
  12. 提问的价值,你了解多少?
  13. 保护Android网络数据教程
  14. 尾部关性尾部风险平价和圣杯分布
  15. 播放流媒体常用工具和格式
  16. Python之路(基本数据类型及操作)
  17. 进厂都要去越南,富士康“曲线救国”,计划增加越南员工人数
  18. Ubuntu系统中mplayer查找rmvb视频解码器的过程解析
  19. 手术麻醉系统管理源码
  20. 网络数据抓取赋能商业分析与业务增长

热门文章

  1. sql登录名和用户名_通过分配角色和权限来移动或复制SQL登录名
  2. Photoshop菜单_中英文对照
  3. 多元线性回归模型的特征选择:全子集回归、逐步回归、交叉验证
  4. pdfjs转图片_Vue项目pdf(base64)转图片
  5. Mac OS X 键盘字母键和数字键的切换
  6. 台式电脑属于小型电子计算机,个人计算机属于小型计算机。
  7. 三步必杀(P4231)
  8. 输入输出流,看似复杂却更好用----小话c++(2)
  9. ubuntu 安装浏览器flash插件
  10. WIN7封装教程2018系列(五)—常规软件安装