增强几何体:多边形和框的交集
Boost Geometry: intersection of a polygon and a box
我一直在尝试使用 Boost 几何库编写算法(如果这很重要,请尝试编写一个盒子计数算法),其中一部分包括处理多边形。虽然我想计算多边形边界与大量框(网格)的交点,但如果您愿意,还可以计算其外环。奇怪的是,函数相交(box[i],多边形)相交(box[i],exterior_ring(polygon))和within(box[i],polygon)给了我相同的结果。例如,对于完全在多边形内的框,我应该得到真,假,真。对于一个在边界上真,真,假。为什么它没有按照我认为应该的方式计算它?
您的问题是关于 3 个函数:
- 相交(方形、多边形)
- 相交(盒子、环)
- 内(盒子、环)
让我从#3开始。其中的功能仅支持盒盒和盒点输入。这意味着环被隐式转换为其边界框,并且您得到的答案是正确的(当一个框在另一个框中时,它们被视为与几何形状相交)。
对于#2,即使盒子在环内,您似乎也想得到"假"。这意味着您要将环(轮廓)视为折线(又名"线串")。您应该向 Boost.Geometry 解释将环视为线串。
为此,您可以将等高线(或环形)点容器"包装"到某个类中,然后将此类注册为线串(或多线串)。类本身可以非常轻量级,只需保留指向容器的指针并提供适当的 const 访问。使用宏BOOST_GEOMETRY_REGISTER_LINESTRING
或BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING
将此类注册为线串。
之后,您大致将其传递给"相交"intersects(my_linestring_wrapper(polygon), box_view(box[i]))
.在这里,代码box_view(box[i])
将返回一个轻量级对象,该对象的行为为"环"(轮廓)。
对于#1,您可以获得盒子或环形交叉点。要强制使用后者,您需要将盒子视为戒指。在 Boost.Geometry 中实现此目的的标准方法是对框应用适当的"视图"。
- 无法将结构注册为增强几何体3D点
- 计算缩放多边形的比例,得到给定的多边形面积
- 将QGraphicsItem的移动区域限制在多边形区域内
- 重新排列单线以形成闭合多边形?
- 提升几何体:C++并集多个多边形
- 提升几何体:assertion_failed错误C++
- 如何从 Skia 路径几何体中获取网格?
- 在 QT C++中绘制/操作多边形
- Maya API C++:从多边形获取材质
- 添加带有提升的多边形::p奥利贡不编译?
- 使用 C++在 OpenGL 中对 3D 多边形进行纹理处理
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 未能使用增强::几何体::模型::多边形
- 增强几何体:多边形和框的交集
- 相交线多边形增强几何体
- 使用增强:几何体翻转多边形
- 访问boost::几何体多边形中的点数据时出错
- 增强::几何体如何将多边形添加到多重多边形中
- 使用增强几何体旋转多边形
- 我可以在boost::几何体的多边形中存储其他信息吗