判断点是否在多边形内

xiaoxiao2021-02-28  84

计算机图形学中经常需要判断点是否在多边形内,刚好最近写程序的时候遇到这个问题,原理很简单也就不在这里啰嗦了,当时抱着偷懒的心理随便在网上找了一段代码贴到程序里,好像不尽人意,或多或少的存在一些问题,经过多次尝试终于完美解决了,下面附上相关代码:

bool isInPolygon4(const QVector<QPoint>& pts, QPoint & pt) { unsigned vertCount = pts.size(); if (vertCount < 2) { return FALSE; } bool inside = FALSE; for (unsigned i = 1 ; i <= vertCount ; ++i) { const QPoint &A = pts[i - 1]; const QPoint &B = pts[i % vertCount]; if ((B.y() <= pt.y() && pt.y() < A.y()) || (A.y() <= pt.y() && pt.y() < B.y())) { float t = (pt.x() - B.x())*(A.y() - B.y()) - (A.x() - B.x())*(pt.y() - B.y()); if (A.y() < B.y()) t = -t; if (t < 0) inside = !inside; } } return inside; }

由于我的工程是在Qt下的所以就用了Qt中的类,如果在非Qt工程下只需要替换成相关的类就行。

转载请注明原文地址: https://www.6miu.com/read-55654.html

最新回复(0)