QPolygonF具有与其他QPolygonF结合,相交和减法的方法,但我需要使用QLineF执行相交测试。这似乎在API中缺失。
我想我可以这样做:
if (polygon .containsPoint (line .p1 ()) != polygon .containsPoint (line .p2 ())
return true;
QPointF a = polygon .back ();
foreach (QPointF b, polygon)
{
if (QLineF :: BoundedIntersection == line .intersect (QPointF (a, b))
return true;
a = b;
}
return false;
上面可能存在一些数字或边缘情况的惊喜,所以我宁愿不这样做。
在Qt API的某个地方是否有我无法看到的提供方法?
答案 0 :(得分:4)
QPolygonF :: intersectcted的实现是:
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
return subject.intersected(clip).toFillPolygon();
即。 QPolygonF使用QPainterPath方法来执行交叉。 所以你可以这样做:
我没有尝试过这个!你必须自己检查一下。我不确定这在数值稳定性和性能方面是否比你的解决方案更好,所以你应该写一些测试。
答案 1 :(得分:1)
不幸的是,答案是“不”。