Qt QPolygonF/QLineF交叉口
具有与其他QPolygonFs并集、相交和相减的方法,但我需要使用QLineF执行相交测试。API中似乎缺少这一点 我想我可以这样做:Qt QPolygonF/QLineF交叉口,qt,computational-geometry,Qt,Computational Geometry,具有与其他QPolygonFs并集、相交和相减的方法,但我需要使用QLineF执行相交测试。API中似乎缺少这一点 我想我可以这样做: if (polygon .containsPoint (line .p1 ()) != polygon .containsPoint (line .p2 ()) return true; QPointF a = polygon .back (); foreach (QPointF b, polygon) { if (QLineF :: Boun
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中是否提供了我看不到的方法?QPolygonF::intersected的实现是:
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
return subject.intersected(clip).toFillPolygon();
i、 e.QPolygonF使用QPainterPath方法进行交叉。
所以你可以做:
- 从多边形的线创建QPaint路径
- 从您的线路创建一个QPainterPath
- 相交
- 用isEmpty()检查结果
- 使用boundingRect()获取交点
我没有试过这个!你得自己检查一下。我不确定这在数值稳定性和性能方面是否比您的解决方案更好,因此您应该编写一些测试。不幸的是,答案是“否”。您不能创建一个多边形,其中有两个点作为直线,然后与两个多边形相交吗?也许,但它有点笨重,可能效率低下,我需要保证这样的零面积形状在数值上表现良好。我不知道有任何其他方法来实现这一点,因为我自己没有遇到过这个特殊的问题。如果你找不到一个Qt方法来实现这一点,那么看看它解释了如何实现你想要的。谢谢你的想法,这是一个好主意,但不幸的是它没有改进。不过,你的努力得到了赏金:-)