spr*_*aff 4 qt computational-geometry
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;
Run Code Online (Sandbox Code Playgroud)
上面可能隐藏着一些数字或边缘情况的惊喜,所以我宁愿不这样做。
Qt API 中是否有我看不到的提供的方法?
QPolygonF::intersected 的实现是:
QPainterPath subject; subject.addPolygon(*this);
QPainterPath clip; clip.addPolygon(r);
return subject.intersected(clip).toFillPolygon();
Run Code Online (Sandbox Code Playgroud)
即 QPolygonF 使用 QPainterPath 方法来进行相交。所以你可以这样做:
我没有尝试这个!你必须自己检查一下。我不确定这在数值稳定性和性能方面是否比您的解决方案更好,因此您应该编写一些测试。