Qt QPolygonF/QLineF交叉口

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

具有与其他QPolygonFs并集、相交和相减的方法,但我需要使用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中是否提供了我看不到的方法?

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方法来实现这一点,那么看看它解释了如何实现你想要的。谢谢你的想法,这是一个好主意,但不幸的是它没有改进。不过,你的努力得到了赏金:-)