pcl matlab 计算平面与空间三角形的交线

这篇具有很好参考价值的文章主要介绍了pcl matlab 计算平面与空间三角形的交线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、生成一个平面

pcl matlab 计算平面与空间三角形的交线,matlab,3D,PCL,平面,算法,3d,matlab

 过程:

单有法向量不能确定一个平面,至少还要有平面上的一个点的坐标才行
假如知道法向量n=(A,B,C)
而平面过某点M=(x0,y0,z0)
那么平面的方程为
A(x-x0)+B(y-y0)+C(z-z0)=0
要在图中画出来,那么先要给x,y一个范围
举个离子,平面法向量(1,1,1)过点(0,1,2)
画出x,y在 -2~2区间内的平面

[x y]=meshgrid(-2:0.1:2);
z=2-x-(y-1);
mesh(x,y,z)

二、三个点计算平面的法线

p1p2=p2-p1;
p1p3=p3-p1;
n=cross(p1p2,p1p3);
D=-dot(n,p1);
EquationPlane=[n,D];

三、平面与三角形的交线


int Interection_Plane_Triangle(Plane &plane,pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud, pcl::PointXYZ &Point1, pcl::PointXYZ  &Point2)
{
	Eigen::Vector3f v_P1{ cloud->points[0].x, cloud->points[0].y, cloud->points[0].z };
	Eigen::Vector3f v_P2{ cloud->points[1].x, cloud->points[1].y, cloud->points[1].z };
	Eigen::Vector3f v_P3{ cloud->points[2].x, cloud->points[2].y, cloud->points[2].z };

	// 三个点在平面的位置(X-x0)*A +(Y-y0)*B +(Z-z0)*C=0  
	float d1 = (v_P1[0] - plane.point_X)*plane.normal_A + (v_P1[1] - plane.point_Y)*plane.normal_B + (v_P1[2] - plane.point_Z)*plane.normal_C;
	float d2 = (v_P2[0] - plane.point_X)*plane.normal_A + (v_P2[1] - plane.point_Y)*plane.normal_B + (v_P2[2] - plane.point_Z)*plane.normal_C;
	float d3 = (v_P3[0] - plane.point_X)*plane.normal_A + (v_P3[1] - plane.point_Y)*plane.normal_B + (v_P3[2] - plane.point_Z)*plane.normal_C;

	// 判断三个点分别三个点和平面不相交
	if ((d1>0 && d2>0 && d3>0) || (d1<0 && d2<0 && d3<0))
	{
		return -1;
	}
	bool s1 = d1<0;
	bool s2 = d2<0;
	bool s3 = d3<0;

	if (s2 != s1)
	{
		Point1.x = (d2*v_P1[0] - d1*v_P2[0]) / (d2 - d1);
		Point1.y = (d2*v_P1[1] - d1*v_P2[1]) / (d2 - d1);
		Point1.z = (d2*v_P1[2] - d1*v_P2[2]) / (d2 - d1);
		if (s1 != s3)
		{
			Point2.x = (d1*v_P3[0] - d3*v_P1[0]) / (d1 - d3);
			Point2.y = (d1*v_P3[1] - d3*v_P1[1]) / (d1 - d3);
			Point2.z = (d1*v_P3[2] - d3*v_P1[2]) / (d1 - d3);
		}
		else {
			Point2.x = (d2*v_P3[0] - d3*v_P2[0]) / (d2 - d3);
			Point2.y = (d2*v_P3[1] - d3*v_P2[1]) / (d2 - d3);
			Point2.z = (d2*v_P3[2] - d3*v_P2[2]) / (d2 - d3);
		}
	}
	else if (s3 != s1)
	{
		Point1.x = (d3*v_P1[0] - d1*v_P3[0]) / (d3 - d1);
		Point1.y = (d3*v_P1[1] - d1*v_P3[1]) / (d3 - d1);
		Point1.z = (d3*v_P1[2] - d1*v_P3[2]) / (d3 - d1);

		Point2.x = (d2*v_P3[0] - d3*v_P2[0]) / (d2 - d3);
		Point2.y = (d2*v_P3[1] - d3*v_P2[1]) / (d2 - d3);
		Point2.z = (d2*v_P3[2] - d3*v_P2[2]) / (d2 - d3);
	}
	return 0;
}

Halcon代码: 

triangulate_object_model_3d (RawPointData3D, 'greedy', ParameterNames, ParameterValues, Surface3DDefault, Info)
write_object_model_3d (Surface3DDefault, 'ply', 'C:/Users/Albert/Desktop/Halcon2PCL/bundy.ply', [], [])
create_pose (0.1, 0.1, 0.1, 90, 90, 90, 'Rp+T', 'gba', 'point', Pose1)

pose2222:=[[69.981483459472656,22.498832702636719,-12.406876564025879,89.999999999999957,-45.000000000000000,44.999999999999972,0]]
pose_to_hom_mat3d (pose2222, HomMat3D2222)

* 生成一个平面
gen_plane_object_model_3d (pose2222,  [-1,-1,1,1] * 180, [-1,1,1,-1] * 180, PlaneObjectModel)
*  用平面切
intersect_plane_object_model_3d (Surface3DDefault,pose2222, PlaneCuting_Model3DIntersection)

mesh 平面切割效果:

pcl:

pcl matlab 计算平面与空间三角形的交线,matlab,3D,PCL,平面,算法,3d,matlab

halcon:

pcl matlab 计算平面与空间三角形的交线,matlab,3D,PCL,平面,算法,3d,matlab文章来源地址https://www.toymoban.com/news/detail-518574.html

到了这里,关于pcl matlab 计算平面与空间三角形的交线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • css实现圆角三角形,圆角三角形的实现

    今天给大家带来一个如何实现圆角三角形的方案,这个方案虽然可以实现,但是也是借助拼凑等方式来实现的,假如想一个div来实现圆角三角形,还是比较困难的。之前文章讲了如何实现对话框,里面介绍了三角形的实现方式。今天讲讲如何实现圆角三角形。 想要生成一个带

    2024年02月09日
    浏览(50)
  • 用python写九九乘法表(左上三角、左下三角、右上三角、右下三角、正三角形、倒三角形格式)

    1.左上三角格式:   2.左下三角格式:   3.右上三角格式:     4.右下角格式:     5.倒三角格式:      

    2024年02月11日
    浏览(54)
  • 符号三角形-计算机算法设计与分析【1600+字解析 dfs全排列 列举情况】【题意分析】【算法分析】【思路是怎么来的】【过程是什么】

    下图是由14个“+”和14个“-”组成的符号三角形。2个同号下面都是“+”,2个异号下面都是“-”。 在一般情况下,符号三角形的第一行有n个符号。符号三角形问题要求对于给定的n,计算有多少个不同的符号三角形,使其所含的“+”和“-”的个数相同。 题意分析 也就是 给

    2024年02月03日
    浏览(36)
  • C语言程序设计:输入一个三角形的三条边长,求出三角形的面积。

    已知三角形的三边长a,b,c,则该三角形的面积公式为:           area=  其中s = (a+b+c)/2

    2024年02月06日
    浏览(57)
  • OpenCV项目开发实战-- 将一个三角形变形为另一个三角形 ( C++ / Python )代码实现

     文末附基于Python和C++两种方式实现的测试代码下载链接 图 1:左图中蓝色三角形内的所有像素都已转换为右图中的蓝色三角形。 在本教程中,我们将看到如何将图像中的单个三角形变形为不同图像中的另一个三角形。 在计算机图形学中,人们一直在处理扭曲三角形,因为任

    2024年02月09日
    浏览(81)
  • 【数字三角形】

    题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走

    2024年02月05日
    浏览(51)
  • css实现三角形

       1. Border 2. transform 3.  :before 和 :after 伪元素 4. clip-path

    2024年02月09日
    浏览(42)
  • CSS 画三角形

    1、transform: rotate + overflow: hidden 就是利用BFC的特性,在封闭的盒子里面,以图形的左下角(left bottom)作为旋转中心,进行旋转,把超出部分隐藏、 2、clip-path 剪切 clip-path 可以将一个容器裁剪成任何我们想要的样子 3、border + transparent 设置一个宽高为0的盒子,用边框大小来控

    2024年01月25日
    浏览(48)
  • 【数字三角形】(C++版)

    题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走

    2024年02月16日
    浏览(53)
  • [unity]三角形顶点顺序

    详见官方文档:Unity - Manual: Mesh data (unity3d.com) 翻译: 拓扑描述网格具有的面类型。 网格的拓扑定义了索引缓冲区的结构,索引缓冲区又描述了顶点位置如何组合成面。每种类型的拓扑都使用索引数组中不同数量的元素来定义单个面。 Unity支持以下网格拓扑: 三角形 Quad 线

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包