qt多变// 判断一个顶点是否为耳朵 bool isEar(QPointF p0, QPointF p1, QPointF p2, QVector<QPointF> points)
时间: 2023-06-11 13:06:15 浏览: 171
C语言判断一个数是否为素数方法解析
5星 · 资源好评率100%
判断一个顶点是否为耳朵需要判断以下三个条件:
1. 该顶点所对应的角度是否为凸角;
2. 该顶点是否在多边形内部;
3. 该顶点是否被多边形中的其他顶点所包含。
以下是判断一个顶点是否为耳朵的实现代码:
```cpp
bool isEar(QPointF p0, QPointF p1, QPointF p2, QVector<QPointF> points)
{
// 判断顶点所对应的角度是否为凸角
QLineF line1(p0, p1);
QLineF line2(p1, p2);
qreal angle = line1.angleTo(line2);
if (angle > 180) {
angle = 360 - angle;
}
if (angle >= 180) {
return false;
}
// 判断顶点是否在多边形内部
QPolygonF polygon(points);
if (!polygon.containsPoint(p0, Qt::OddEvenFill)) {
return false;
}
// 判断顶点是否被多边形中的其他顶点所包含
for (int i = 0; i < points.size(); i++) {
if (points[i] == p0 || points[i] == p1 || points[i] == p2) {
continue;
}
QLineF line(points[i], p0);
if (polygon.containsPoint(points[i], Qt::OddEvenFill) && line.intersect(line1, nullptr) == QLineF::NoIntersection && line.intersect(line2, nullptr) == QLineF::NoIntersection) {
return false;
}
}
return true;
}
```
其中,points 是多边形的顶点集合。函数返回值为 true 表示该顶点是一个耳朵。
阅读全文