精华内容
下载资源
问答
  • 平面分割
    2019-08-01 10:25:31

    平面分割

    令第n条直线分割的平面数是f(n),则f(1)=2

    我们再来考虑第n条直线,第n条直线与n-1条直线相交,交点不重叠,那么第n条直线被分成了n段。如上面的图可以看出此规律。这n段线段或者射线参与了平面的分割任务,而且他们分别位于n-1条直线分割出来的不同的平面区域内。所以第n条直线加入之后,多出来的平面数量是n。

    故有 f(n)=f(n-1)+n.

    递归式求出来了,可知
    f ( n ) = f ( 1 ) + 2 + 3 + . . . + n = 1 + 1 + 2 + 3 + . . . + n = n ( n + 1 ) 2 + 1 f(n) =f(1)+2+3+...+n=1+1+2+3+...+n=\dfrac{n(n+1)}{ 2}+1 f(n)=f(1)+2+3+...+n=1+1+2+3+...+n=2n(n+1)+1

    更多相关内容
  • 平面上有n条封闭曲线,其中任何两条封闭曲线交于两点,且任何三条曲线不交于同一点,计算这些封闭曲线分割的区域个数。
  • 当前随着3D相机在智能机器人领域的广泛运用,越来越多的学者投入到了基于3D相机深度图像的室内三维平面分割研究当中。文运用了一种快速而且比较稳定的方法去检测复杂的平面,其中深度图像是运用Kinect相机采集的。...
  • 依据点的局部特征设置区域增长法生长准则对建筑物目标进行平面分割并对分割结果进行优化。实验结果表明,该方法不仅能快速有效提取大场景中的建筑物目标进行分割,并且解决了传统区域增长法不稳定的问题,提高了建筑...
  • 平面分割空间

    2016-07-18 17:22:46
    一篇网上找到的分析平面分割空间的很好的文档,分享给个位acmer们看看。
  • 第一次做几何题: 看到了一篇十分好的推导,原文请见: 第十一届蓝桥杯A组省赛平面分割_Alan_Lowe-CSDN博客_蓝桥杯平面分割 也有一个小的公式总结,原文请见: 【蓝桥杯】平面分割_木又可可的博客-CSDN博客_蓝桥平面...

     第一次做几何题:

    看到了一篇十分好的推导,原文请见:

    第十一届蓝桥杯A组省赛平面分割_Alan_Lowe-CSDN博客_蓝桥杯平面分割

    也有一个小的公式总结,原文请见:

    【蓝桥杯】平面分割_木又可可的博客-CSDN博客_蓝桥平面分割

    推导的过程是用递归来看的:

    直线

    首先只考虑直线,设f(n)代表n条直线可以把平面分割成最多平面个数

    很容易想到f(1)=2。f(2)=4,即两条直线相交,f(3)=7,即一条线和另外两条已存在直线相交于原来不同的两点。

    能用出递归的思想是基于这样一个数学规律:对于第n条直线,我们最多能让他与前边的n-1条直线有n-1个新的交点,而多产生的平面数就是这条直线被分割成的段数n-1+1=n个

    所以有这样的公式:

    f(n)=f(n-1)+n=f(1)+2+...+n=1+(1+n)*n/2

    圆:

    设g(m)是m个圆最多将平面划分成的平面个数,我们有g(1)=2,g(2)=4,g(3)=8,这里的规律是,第m个新加入的圆与之前的m-1个圆最多有2(m-1)个交点,而新产生的平面数是2(m-1)个,所以有这样的推断:

    g(m)=g(m-1)+2(m-1)=g(1)+2(1+...+m-1)=2+m(m-1)

    直线和圆:

    设h(n,m)是n条直线和m个圆最多将平面分割成的平面个数,由前面的推导我们知道:

    h(0,m)=2+m(m-1)

    那么加一条直线呢?直线最多和m个圆有2(m-1)个交点,被分割成2m-1条线段和两条射线,增加2m个平面,

    h(1,m)=2+m(m-1)+2m

    如果再往里边加一条呢?除了新增加的2m,这条直线和原来的那n-1条直线又会产生新的n个平面

    所以有如下的推导:

    h(n,m)=2+m(m-1)+2m+(2m+n+...2m+2)

            =1+m(m-1)+2mn+(1+n)n/2

    最后直接带公式得到答案:1391

    展开全文
  • 点云平面分割 #include <iostream> #include <pcl/console/parse.h> #include <pcl/filters/extract_indices.h> // 由索引提取点云 #include <pcl/io/pcd_io.h> #include <pcl/point_...

    点云平面分割

    #include <iostream>
    #include <pcl/console/parse.h>
    #include <pcl/filters/extract_indices.h>          // 由索引提取点云
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    #include <pcl/sample_consensus/ransac.h>          // 采样一致性
    #include <pcl/sample_consensus/sac_model_plane.h> // 平面模型
    #include <pcl/sample_consensus/sac_model_sphere.h>// 球模型
    #include <pcl/visualization/pcl_visualizer.h>     // 可视化
    #include <boost/thread/thread.hpp>
    
    /*
    输入点云
    返回一个可视化的对象
    */
    boost::shared_ptr<pcl::visualization::PCLVisualizer>
    simpleVis(pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud)
    {
    	// --------------------------------------------
    	// -----打开3维可视化窗口 加入点云----
    	// --------------------------------------------
    	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    	viewer->setBackgroundColor(0, 0, 0);//背景颜色 黑se
    	viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");//添加点云
    	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");//点云对象大小
    	viewer->addCoordinateSystem (1.0, "global");//添加坐标系
    	viewer->initCameraParameters();//初始化相机参数
    	return (viewer);
    }
    
    /******************************************************************************
     对点云进行初始化,并对其中一个点云填充点云数据作为处理前的的原始点云,
     其中大部分点云数据是基于设定的圆球和平面模型计算
      而得到的坐标值作为局内点,有1/5的点云数据是被随机放置的组委局外点。
     ******************************************************************************/
    int
    main(int argc, char** argv)
    {
    	// 初始化点云对象
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);  //存储源点云
    	pcl::PointCloud<pcl::PointXYZ>::Ptr final1(new pcl::PointCloud<pcl::PointXYZ>);  //存储提取的局内点
    
    	// 填充点云数据
    	pcl::io::loadPCDFile("d://1.pcd", *cloud);
    
    	std::vector<int> inliers;  //存储局内点集合的点的索引的向量
    
    	//创建随机采样一致性对象
    	
    	pcl::SampleConsensusModelPlane<pcl::PointXYZ>::Ptr
    		model_p(new pcl::SampleConsensusModelPlane<pcl::PointXYZ>(cloud));   //针对平面模型的对象
     //根据命令行参数,来随机估算对应平面模型,并存储估计的局内点
    		pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_p);
    		ransac.setDistanceThreshold(1);    //与平面距离小于1 的点称为局内点考虑
    		ransac.computeModel();                //执行随机参数估计
    		ransac.getInliers(inliers);           //存储估计所得的局内点
    
    
    	// 复制估算模型的所有的局内点到final中
    	pcl::copyPointCloud<pcl::PointXYZ>(*cloud, inliers, *final1);
    
    	// 创建可视化对象并加入原始点云或者所有的局内点
    	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer;
    	
    		viewer = simpleVis(final1);
    	
    	while (!viewer->wasStopped())
    	{
    		viewer->spinOnce(100);
    		boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    	}
    	return 0;
    }
    

    代码的结果
    在这里插入图片描述

    循环分割点云中的所有平面,将剩余点云进行可视化

    #include <iostream>
    #include <pcl/ModelCoefficients.h>
    #include <pcl/io/pcd_io.h>
    #include <pcl/point_types.h>
    #include <pcl/sample_consensus/method_types.h>
    #include <pcl/sample_consensus/model_types.h>
    #include <pcl/segmentation/sac_segmentation.h>
    #include <pcl/filters/voxel_grid.h>
    #include <pcl/filters/extract_indices.h>
    #include <pcl/visualization/pcl_visualizer.h>
    
    int
    main(int argc, char** argv)
    {
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>), cloud_p(new pcl::PointCloud<pcl::PointXYZ>), cloud_f(new pcl::PointCloud<pcl::PointXYZ>);
    	// 填入点云数据
    	pcl::io::loadPCDFile("11.pcd", *cloud);
    
    	// 创建滤波器对象
    	pcl::VoxelGrid<pcl::PointXYZ> sor;//滤波处理对象
    	sor.setInputCloud(cloud);
    	sor.setLeafSize(0.01f, 0.01f, 0.01f);//设置滤波器处理时采用的体素大小的参数
    	sor.filter(*cloud_filtered);
    	std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << " data points." << std::endl;
    	// 将下采样后的数据存入磁盘
    	pcl::PCDWriter writer;
    	writer.write<pcl::PointXYZ>("table_scene_lms400_downsampled.pcd", *cloud_filtered, false);
    	pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
    	pcl::PointIndices::Ptr inliers(new pcl::PointIndices());
    	// 创建分割对象
    	pcl::SACSegmentation<pcl::PointXYZ> seg;
    	// 可选
    	seg.setOptimizeCoefficients(true);
    	// 必选
    	seg.setModelType(pcl::SACMODEL_PLANE);
    	seg.setMethodType(pcl::SAC_RANSAC);
    	seg.setMaxIterations(1000);
    	seg.setDistanceThreshold(0.01);
    	// 创建滤波器对象
    	pcl::ExtractIndices<pcl::PointXYZ> extract;
    	int i = 0, nr_points = (int)cloud_filtered->points.size();
    	// 当还有30%原始点云数据时
    	while (cloud_filtered->points.size() > 0.3 * nr_points)
    	{
    		// 从余下的点云中分割最大平面组成部分
    		seg.setInputCloud(cloud_filtered);
    		seg.segment(*inliers, *coefficients);
    		if (inliers->indices.size() == 0)
    		{
    			std::cerr << "Could not estimate a planar model for the given dataset." << std::endl;
    			break;
    		}
    		// 分离内层
    		extract.setInputCloud(cloud_filtered);
    		extract.setIndices(inliers);
    		extract.setNegative(false);
    		extract.filter(*cloud_p);
    		std::cerr << "PointCloud representing the planar component: " << cloud_p->width * cloud_p->height << " data points." << std::endl;
    		std::stringstream ss;
    		ss << "table_scene_lms400_plane_" << i << ".pcd";
    		writer.write<pcl::PointXYZ>(ss.str(), *cloud_p, false);
    		// 创建滤波器对象
    		extract.setNegative(true);
    		extract.filter(*cloud_f);
    		cloud_filtered.swap(cloud_f);
    		i++;
    	}
    	boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
    
    
    	// 设置背景色为灰色(非必须)
    	viewer->setBackgroundColor(0.05, 0.05, 0.05, 0);
    
    	// 添加一个普通点云 (可以设置指定颜色,也可以去掉single_color参数不设置)
    	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud_filtered, 0, 255, 0);
    	viewer->addPointCloud<pcl::PointXYZ>(cloud_filtered, single_color, "sample cloud_filtered");
    	viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "sample cloud_filtered");
    	viewer->addCoordinateSystem(0.5);
    
    	// 直到窗口关闭才结束循环
    	while (!viewer->wasStopped()) {
    		// 每次循环调用内部的重绘函数
    		viewer->spinOnce();
    	}
    	return (0);
    }
    
    
    
    展开全文
  • 点云分割--RANSAC平面分割

    千次阅读 2021-05-07 17:38:28
    ransac是一种很有效的平面分割方法,根据设定的模型不断迭代找出属于模型的点。同时通过设置距离模型阈值可以起到分割多大地面起伏程度的地面。 3.数据 本例中使用的点云数据(test.pcd)请见百度网盘分享。 链接:...

    1.版本要求

    版本: >PCL1.3

    2.简介

    平面分割可用于地面检测,ransac是一种非常有效的平面分割方法,根据设定的平面模型不断迭代找出属于平面的点。同时通过设定模型距离阈值(setDistanceThreshold)可以检测不同起伏程度的地面。

    3.数据

    本例中使用的点云数据(test.pcd)请见百度网盘分享。
    链接:https://pan.baidu.com/s/1CN3sb1lRylfvT67PnRdKiw
    提取码:kz7q

    4.代码

    #include <pcl/point_types.h>
    #include <pcl/io/pcd_io.h>
    #include <pcl/filters/extract_indices.h>
    #include <pcl/segmentation/sac_segmentation.h>
    #include <pcl/visualization/cloud_viewer.h>
    
    int main(int argc, char** argv)
    {
    	pcl::PCDReader reader;
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_plane(new pcl::PointCloud<pcl::PointXYZ>);
    	reader.read("test.pcd", *cloud);  //读取点云
    	
    	pcl::PointIndices::Ptr inliers(new pcl::PointIndices);  //创建平面分割后存储平面点云的索引
    
    	pcl::SACSegmentation<pcl::PointXYZ> seg;  //创建sac分割对象
    	pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients);
    	seg.setOptimizeCoefficients(true);
    	seg.setModelType(pcl::SACMODEL_PLANE);  //设置模型为平面
    	seg.setMethodType(pcl::SAC_RANSAC);  //设置分割方法为ransac
    	seg.setMaxIterations(100);  //设置最大迭代次数
    	seg.setDistanceThreshold(0.15);  //设置偏离模型距离阈值
    	seg.setInputCloud(cloud);
    	seg.segment(*inliers, *coefficients);  
    
    	if (inliers->indices.size() == 0)  //检查一下是否有平面分割出来
    	{
    		std::cout << "Could not estimate a planar model for the given dataset." << std::endl;
    	}
    
    	pcl::ExtractIndices<pcl::PointXYZ> extract;  //抽取分割得到的平面点云
    	extract.setInputCloud(cloud);
    	extract.setIndices(inliers);
    	extract.setNegative(false);
    	extract.filter(*cloud_plane);
    	std::cout << "PointCloud representing the planar component: " << cloud_plane->size() << " data points." << std::endl;
    
    
    	pcl::visualization::PCLVisualizer viewer("Cloud Viewer");
    	int v1(0);  //创建左窗口显示原始点云
    	viewer.createViewPort(0, 0, 0.5, 1.0, v1);  //左右窗口大小划分,1:1
    	viewer.setBackgroundColor(0, 0, 0, v1);
    	viewer.addText("Cloud Original", 2, 2, "Cloud Original", v1);  //窗口下的标题
    	pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> rgb1(cloud, "z");
    	viewer.addPointCloud<pcl::PointXYZ>(cloud, rgb1, "original cloud", v1);
    	viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "original cloud", v1);
    	viewer.addCoordinateSystem(1.0, "original cloud", v1);
    	int v2(1);  //创建右窗口显示分割后的平面
    	viewer.createViewPort(0.5, 0, 1.0, 1.0, v2);  //左右窗口大小划分,1:1
    	viewer.setBackgroundColor(0, 0, 0, v2);
    	viewer.addText("Cloud Segmentation", 2, 2, "Cloud Segmentation", v2);  //窗口下的标题
    	pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> rgb2(cloud_plane, "z");
    	viewer.addPointCloud<pcl::PointXYZ>(cloud_plane, rgb2, "plane cloud", v2);
    	viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "plane cloud", v2);
    	viewer.addCoordinateSystem(1.0, "plane cloud", v2);
    
    	viewer.spin();
    
    	return (0);
    }
    

    5.效果

    在这里插入图片描述

    展开全文
  • 第十一届蓝桥杯A组省赛平面分割

    千次阅读 多人点赞 2021-08-03 19:34:13
    第十一届蓝桥杯A组省赛平面分割 比赛的时候我没有想到所以没做出来,今天来补一下。 这是一个递推的题目,首先看一下若干个直线和圆分别来分割平面: 1.直线分割平面 一条直线要怎么样放置才能使得平面被分割为尽...
  • 1.平面分割 2.平面切分 一、解题 1.平面分割 2.平面切分 二、总结 前言 对于平面问题,最重要的就是找对规律!! 上题目 1.平面分割 原题链接 2.平面切分 平面切分原题链接。 一、解题 1....
  • 目录思路源码 思路 分割出多个平面,并赋予不同颜色进行显示,将点云...// 平面分割 // source /home/robot/catkin_ws/devel/setup.bash && rosrun chapter10_tutorials plane // //*************************
  • 此乃神人(1) n条直线最多分平面问题题目大致如:n条直线,最多可以把平面分为多少个区域。析:可能你以前就见过这题目,这充其量是一道初中的思考题。但一个类型的题目还是从简单的入手,才容易发现规律。当有n...
  • 提出了一种基于空间平面分割和投影变换的光场图像拼接算法。依据光场深度信息对目标场景进行平面拟合和分割,并根据颜色信息利用马尔可夫模型对分割结果进行了优化。利用不同视点间的光流信息求解投影变换矩阵,将...
  • PCB 地平面分割

    2019-01-25 15:27:23
    一个完整的地平面能减少电路板的EMI和串扰问题。在数模混合布板时,数字电路的同步开关噪声往往会 影响敏感的模拟电路。...的分割平面以及为什么这样分割进行了讨论,并给出了地分割的相应设计原则。
  • PCL 点云平面分割总结

    千次阅读 2021-01-28 14:11:25
    首先要引入关于平面分割的头文件 #include <pcl/ModeCoefficients.h> //模型系数相关头文件 #include<pcl/sample_consensus/method_types.h> //模型定义头文件 #include<pcl/sample_consensus/...
  • 蓝桥杯--平面分割

    2021-04-15 20:25:38
    题目描述: 20 个圆和 2020 条直线最多能把平面分成多少个部分? #include<iostream> #include<cstring> #include<...//第一个圆将平面分割为2部分 //接下来的圆都必须两两相交才能使得分
  • // 当还有30%原始点云数据时 while (cloud_filtered->points.size() > 0.3 * nr_points) { // 从余下的点云中分割最大平面组成部分 seg.setInputCloud(cloud_filtered); seg.segment(*inliers, *...
  • 20年蓝桥杯C组 跑步锻炼 平面分割

    千次阅读 2022-01-23 22:30:32
    } 平面分割 1391 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 2020 个圆和 2020 条直线最多能把平面分成多少个部分? 所以是 (1+20)20/2+1+(40+42+·····78)...
  • 利用PCL提供的接口,从一个自己定义的点云中分割出一个平面 先导入头文件 #include <iostream> #include <pcl/ModelCoefficients.h> #include <pcl/point_types.h> #include <pcl/sample_...
  • 1.1 平面分割问题-C++

    2021-07-28 09:52:54
    1.1 平面分割问题-C++ 【问题描述】 同一平面内有n(n≤500)条直线,已知其中p(p≥2)条直线相交于同一点,则这n条直线最多能将平面分割成多少个不同的区域? 【输入格式】 两个整数n(n≤500)和p(2≤p≤n)。 ...
  • n条直线能把一个平面划分成几部分:假设第n-1条直线已经放好产生f(n-1)个区域,放第n条直线时,为了划分区域更多,第n条直线与前面的n-1条直线产生n-1个交点,因此产生了n-2个线段,和2条射线。n-2个线段(交点数-...
  • cadence allegro电源层平面分割

    千次阅读 2020-04-04 00:01:27
      allegro的电源层平面分割与AD的原理相同,只不过是关于敷铜和分割线的操作有自己的一套方法。   AD的相关文章可以参考之前的这篇:四层PCB核心板制作8——内电层电源平面分割。 绘制anti etch   allegro和AD...
  • 平面分割 【问题描述】 20 个圆和20 条直线最多能把平面分成多少个部分? 暂时不会以后再写 成绩统计 题目描述 成绩统计 小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的...
  • 平面分割 本题总分: 15分 [问题描述] 20个圆和20条直线最多能把平面分成多少个部分? [答案提交] 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写...
  • 平面分割问题

    2018-08-29 02:36:29
    (1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域。 析:可能你以前就见过这题目,这充其量是一道初中的思考题。但一个类型的题目还是从简单的入手,才容易发现规律。当有n-1条直线...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,141
精华内容 18,056
关键字:

平面分割