利用PCL库做简单的三维立体图形
利用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平面对称的圆柱面。
ConsSphereCloud(basic_cloud_ptr);pcl::io::savePCDFileASCII("sphere.pcd", *basic_cloud_ptr);
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库做简单的三维立体图形相关推荐
- 利用pcl库实现简单单帧障碍物检测
利用pcl库实现简单单帧障碍物检测 #include <iostream> #include <pcl/common/common_headers.h> #include &l ...
- 利用PCL库从点云数据生成深度图像及关键点提取
利用PCL库从点云数据生成生成深度图像及关键点提取 利用PCL库从点云数据生成深度图像及关键点提取 本想利用标准点云数据库分割成若干块,利用标准点云数据生成深度图像作为数据库用来验证算法,目前效果不是 ...
- python rsa 公钥解密_python利用rsa库做公钥解密的方法教程
前言 对于RSA的解密,即密文的数字的 D 次方求mod N 即可,即密文和自己做 D 次乘法,再对结果除以 N 求余数即可得到明文.D 和 N 的组合就是私钥(private key). 算法的加密 ...
- 利用monment库做一个日历表
利用monment库做一个日历表 先看完成品 点击上月和下月根据当前系统的时间进行变化 这是布局 <div class="wapper"><div class=& ...
- 利用PCL库构建Mesh三维模型
从两张任意拍摄的一对图像(得有大部分重合面积)和相机内参矩阵开始,重建出基于Mesh的三维模型,美观又实用,还不赶快学起来.本文也是记录一下自己学习过程,废话较多,请多包涵,主要代码已注释,请自行下载 ...
- python的turtle怎么画曲线_利用 turtle库绘制简单图形
turtle库是python的基础绘图库,这个库被介绍为一个最常用的用来介绍编程知识的方法库,其主要是用于程序设计入门,是标准库之一,利用turtle可以制作很多复杂的绘图. turtle名称含义为& ...
- Visual C++6.0画三维立体图形
在画三维立体图之前,主要是先要找到二维和三维的对应关系,这是转化的关键. 关键代码如下: S[i].x=P[i][1]+sqrt(2)/3.0*(-P[i][0]);S[i].y=P[i][2]+sq ...
- 利用Python Matplotlib库做简单的视觉化(2)
Matplotlib练习 题目 练习一 方法一(条形图) 方法一效果图 方法二(扇形图) 方法二效果图 练习二 练习二代码 练习二效果图 小结 题目 练习一 方法一(条形图) from matplot ...
- 利用Python Matplotlib库做简单的视觉化
Matplotlib练习 练习一 题目 代码 效果图 练习二 题目 练习1代码 练习1效果图 练习2代码 练习2效果图 小结 练习一 题目 代码 import matplotlib.pyplot as ...
最新文章
- python field详解_Django中models Field详解
- 测试openssl_encrypt
- vs矩形框边框线显示被选中的区域;_条形码区域解码:Web小工具
- mysql float64_'numpy.float64'对象没有属性'translate'在Python中插入值到Mysql
- HTML五子棋人人对战源代码,五子棋C++源代码 单机 联机 人机对战 人人对战
- Windows核心编程_修改开机密码
- 28.go fmt 与 gofmt
- 将dataset中的数据 数据库中 java_java-将NoSQLUnit与@ShouldMatchDataSet一起使用时,...
- 游戏必备组件有哪些_微信抖音小游戏黄金矿工案例详解
- 美团和饿了么分别有什么优势和劣势?
- @loj - 2339@ 「WC2018」通道
- 提问的价值,你了解多少?
- 保护Android网络数据教程
- 尾部关性尾部风险平价和圣杯分布
- 播放流媒体常用工具和格式
- Python之路(基本数据类型及操作)
- 进厂都要去越南,富士康“曲线救国”,计划增加越南员工人数
- Ubuntu系统中mplayer查找rmvb视频解码器的过程解析
- 手术麻醉系统管理源码
- 网络数据抓取赋能商业分析与业务增长
热门文章
- sql登录名和用户名_通过分配角色和权限来移动或复制SQL登录名
- Photoshop菜单_中英文对照
- 多元线性回归模型的特征选择:全子集回归、逐步回归、交叉验证
- pdfjs转图片_Vue项目pdf(base64)转图片
- Mac OS X 键盘字母键和数字键的切换
- 台式电脑属于小型电子计算机,个人计算机属于小型计算机。
- 三步必杀(P4231)
- 输入输出流,看似复杂却更好用----小话c++(2)
- ubuntu 安装浏览器flash插件
- WIN7封装教程2018系列(五)—常规软件安装