QLineF::IntersectType QLineF::intersect(const QLineF &l, QPointF *intersectionPoint) const { // ipmlementation is based on Graphics Gems III's "Faster Line Segment Intersection" const QPointF a = pt2 - pt1; const QPointF b = l.pt1 - l.pt2; const QPointF c = pt1 - l.pt1; const qreal denominator = a.y() * b.x() - a.x() * b.y(); if (denominator == 0 || !qt_is_finite(denominator)) return NoIntersection; const qreal reciprocal = 1 / denominator; const qreal na = (b.y() * c.x() - b.x() * c.y()) * reciprocal; if (intersectionPoint) *intersectionPoint = pt1 + a * na; if (na < 0 || na > 1) return UnboundedIntersection; const qreal nb = (a.x() * c.y() - a.y() * c.x()) * reciprocal; if (nb < 0 || nb > 1) return UnboundedIntersection; return BoundedIntersection; }
/*! Returns true if the float \a {f} is a finite number. */ Q_CORE_EXPORT bool qIsFinite(float f) { return qt_is_finite(f); }
/*! Returns true if the double \a {d} is a finite number. */ Q_CORE_EXPORT bool qIsFinite(double d) { return qt_is_finite(d); }