boost geometry计算向量与几何体之间的交点

Geos提供了常见的几何对象和基本操作,但是与Boost.Geometry库一样,仅限于二维平面,无法处理三位几何体。
使用Boost.Geometry计算直线和多边形之间的交点
使用boost :: geometry的多边形法线向量
Boost :: geometry:计算多边形的质心
请教各位大佬 Boost/Geometry能否创建三维图形?
向量交点坐标公式_[单位向量,与平面交点]已知向量坐标,怎样求其与已知平面的交点…


Boost库–功能介绍–Geometry–图形开发库–计算几何–常用功能封装–GraphicalDebugging(一)
Boost库–功能介绍–Geometry–图形开发库–计算几何–常用功能封装–GraphicalDebugging(二)
boost库之geometry<二>
boost库之geometry

三维测试代码

1.定义六面体
//typedef bg::model::d2::point_xy<double> point_t;
	typedef bg::model::d3::point_xyz<int> point_t;
	point_t	pt1,pt2,pt3,pt4,pt5,pt6,pt7,pt8;
	pt1.x(-1);
	pt1.y(-1);
	pt1.z(0);

	pt2.x(1);
	pt2.y(-1);
    pt2.z(0);

	pt3.x(1);
	pt3.y(1);
	pt3.z(0);

	pt4.x(-1);
	pt4.y(1);
	pt4.z(0);

	pt5.x(-1);
	pt5.y(-1);
	pt5.z(1);

	pt6.x(1);
	pt6.y(-1);
	pt6.z(1);

	pt7.x(1);
	pt7.y(1);
	pt7.z(1);

	pt8.x(-1);
	pt8.y(1);
	pt8.z(1);
	typedef bg::model::polygon<point_t> polygon_t;
	polygon_t m_hexahedron;
	bg::append(m_hexahedron.outer(), pt1);
	bg::append(m_hexahedron.outer(), pt2);
	bg::append(m_hexahedron.outer(), pt3);
	bg::append(m_hexahedron.outer(), pt4);
	bg::append(m_hexahedron.outer(), pt5);
	bg::append(m_hexahedron.outer(), pt6);
	bg::append(m_hexahedron.outer(), pt7);
	bg::append(m_hexahedron.outer(), pt8);
2.计算六面体重心
point_t pc;
	boost::geometry::centroid(m_hexahedron, pc);
	std::cout << "centroid m_hexahedron  1: " << boost::geometry::dsv(pc) << std::endl;

输出结果:

centroid m_hexahedron  1: (0, 0, -858993460)

可以看出z的结果明显不对

3.计算线与六面体的交点
typedef bg::model::segment<point_t> DSegment; //线段
	DSegment ds;
	ds.first = pt1;
	ds.second = pt2;
	std::vector<point_t> output1;
	//bg::intersection(ds, m_hexahedron, output1);
	for (int i = 0; i < output1.size(); i++)
	{
		std::cout << output1[i].get<0>() << " " << output1[i].get<1>() << " " << output1[i].get<2>() << std::endl;
	}

编译报错

typedef bg::model::linestring<point_t> DLineString;
	DLineString d1;
	d1.push_back(pt1);
	d1.push_back(pt8);
	std::vector<point_t> output;
	bg::intersection(d1, m_hexahedron, output);
	for (int i = 0; i < output.size(); i++)
	{
		std::cout << output[i].get<0>() << " " << output[i].get<1>() << " " << output[i].get<2>() << std::endl;
	}

输出结果:

-1 1 -858993460
-1 -1 0
-1 1 -858993460

z坐标对应的结果明显不对。

质心与重心

三角形质心是重心
三角形重心是三角形三条中线的交点。中线的线段将顶点连接到另一侧的中点。

连接四面体的一个顶点与所对面重心的线段,称为四面体过这个顶点的一条中线。
四面体的四条中线的交点称为这个四面体的重心。
四面体的重心就是质心。

boost.geometry库:
centroid()
计算几何图形的质心

向量转直线解析方程式

若(A,B)为直线的方向向量,则直线:Bx-Ay+C=0
若(A,B)为直线的法向量,则直线:Ax+By+C=0
高等数学入门——空间直线方程的几种常见形式
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值