/* private */ bool NodingValidator::hasInteriorIntersection(const LineIntersector& aLi, const Coordinate& p0, const Coordinate& p1) const { for (int i=0, n=aLi.getIntersectionNum(); i<n; i++) { const Coordinate &intPt=aLi.getIntersection(i); if (!(intPt==p0 || intPt==p1)) return true; } return false; }
/** * Computes an intersection point between two segments, if there is one. * There may be 0, 1 or many intersection points between two segments. * If there are 0, null is returned. If there is 1 or more, a single one * is returned (chosen at the discretion of the algorithm). If * more information is required about the details of the intersection, * the {@link RobustLineIntersector} class should be used. * * @param line * @return an intersection point, or <code>null</code> if there is none */ Coordinate * LineSegment::intersection(const LineSegment *line) const { LineIntersector *li = new RobustLineIntersector(); li->computeIntersection(p0, p1, line->p0, line->p1); if (li->hasIntersection()) { Coordinate *c=new Coordinate(li->getIntersection(0)); delete li; return c; } delete li; return NULL; }
void object::test<1>() { LineIntersector i; Coordinate p1(10, 10); Coordinate p2(20, 20); Coordinate q1(20, 10); Coordinate q2(10, 20); Coordinate x(15, 15); i.computeIntersection(p1, p2, q1, q2); ensure_equals(i.getIntersectionNum(), (int)LineIntersector::POINT_INTERSECTION); ensure_equals(i.getIntersectionNum(), 1); ensure_equals(i.getIntersection(0), x); ensure("isProper", i.isProper()); ensure("hasIntersection", i.hasIntersection()); }