bounded_side( ) == CGAL::ON_BOUNDED_SIDE会发生内存异常报错

我利用CGAL判断点是否落在多边形内部,如下代码会发生异常报错:

Point_2 p(x, y);
for (const auto& polygon : cgalPolygons) 
{
                Polygon_2 poly(polygon.begin(), polygon.end());

                if (poly.bounded_side(p) == CGAL::ON_BOUNDED_SIDE) 
                {
                    break;
                }
            }

原因暂不清楚,但是可以使用非CGAL的方法代替该需求
射线投射法检查点是否在多边形内部:

            Point_2 p(x, y);

            // 使用射线投射法检查点是否在多边形内部
            bool isInsideAnyPolygon = false;
            for (const auto& polygon : cgalPolygons)
             {
                if (isPointInPolygon(p, polygon))
                 {
                    isInsideAnyPolygon = true;
                    break;
                }
            }

其中isPointInPolygon函数定义如下:

bool isPointInPolygon(const Point_2& p, const std::vector<Point_2>& polygon)
 {
    int n = polygon.size();
    bool inside = false;

    for (int i = 0, j = n - 1; i < n; j = i++) 
    {
        double xi = polygon[i].x(), yi = polygon[i].y();
        double xj = polygon[j].x(), yj = polygon[j].y();

        bool intersect = ((yi > p.y()) != (yj > p.y())) &&
            (p.x() < (xj - xi) * (p.y() - yi) / (yj - yi) + xi);
        if (intersect)
         {
            inside = !inside;
        }
    }

    return inside;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值