gpt4 book ai didi

c++ - 确定点是否在 boost::geometry::linear_ring 会计方向内

转载 作者:行者123 更新时间:2023-11-28 03:04:46 25 4
gpt4 key购买 nike

我想用 boost::geometry 确定点是否在多边形内.

我使用函数 boost::geometry::within然后输入 boost::geometry::linear_ring<boost::geometry::point_2d>指定轮廓。

如果我不需要考虑轮廓的方向,一切都很好。
但就我而言,我想考虑方向。我的意思是,如果特定轮廓的内部区域被认为受其边界限制并且是有限的,那么倒置轮廓的内部区域应该是无限的——与初始轮廓的区域互补。

是否可以在 within 中考虑轮廓的方向功能?

可以用下面的代码来表达:

// Create contour which defines square
boost::geometry::linear_ring<boost::geometry::point_2d> contour;
contour.push_back(boost::geometry::point_2d(4, 2));
contour.push_back(boost::geometry::point_2d(2, 2));
contour.push_back(boost::geometry::point_2d(2, 4));
contour.push_back(boost::geometry::point_2d(4, 4));
contour.push_back(boost::geometry::point_2d(4, 2));

// Create contour which defines square with opposite direction.
boost::geometry::linear_ring<boost::geometry::point_2d> contourInverted = contour;
std::reverse(contourInverted.begin(), contourInverted.end());

// Specify point inside square
boost::geometry::point_2d testPoint(3, 3);

// Perform tests
bool ret1 = boost::geometry::within(testPoint, contour);
bool ret2 = boost::geometry::within(testPoint, contourInverted);

执行上述代码后ret1ret2都是true .但我会 ret1 != ret2 .

通常我需要在 ret1 != ret2 时获得功能对于任何 testPoint (当点正好在边界上或多边形退化等时,我在这里不考虑边界情况......)

我试过了 different strategies传递给 boost::geometry::within , 但我还没有得到我需要的东西。

似乎我需要或类似的功能在 boost::geometry 的某处实现了,因为 documetation for within有带孔的多边形示例。但我还没有意识到如何将它用于我的案例。

还有一个非常简单的解决方法。我只需要编写一个代码来确定轮廓的方向。然后我就否定或不否定 within 的结果功能取决于轮廓方向。但是如果 boost::geometry已经实现了,我不想重复它。

最佳答案

据我所知,Boost.Geometry 和 Boost.Polygon 都不能处理您定义的“无限”区域。他们确实使用带孔的多边形甚至一组这样的多边形。

您可以考虑添加一个大矩形来限制您的宇宙。然后您可以将倒置轮廓定义为此类矩形中的孔。

顺便说一句,在许多情况下,可以避免将框转换为轮廓。 Boost.Geometry 提供了一个适配器“box_view”,它允许像使用(正向)轮廓一样使用框。

至于任意轮廓的方向,可能最简单的方法是计算它的面积。另一方面,对于结构良好的环,方向在编译时已知,并由元函数 traits::point_order 提供,请参阅详细信息 here

关于c++ - 确定点是否在 boost::geometry::linear_ring 会计方向内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013289/

25 4 0
文章推荐: C++ 总线错误 :10 while trying to parse and update string
文章推荐: html - 当我将 更改为
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com