Position PositionVector::intersectsAtPoint(const PositionVector& v1) const { for (const_iterator i = begin(); i != end() - 1; i++) { if (v1.intersects(*i, *(i + 1))) { return v1.intersectsAtPoint(*i, *(i + 1)); } } /* if(v1.intersects(*(end()-1), *(begin()))) { return v1.intersectsAtPoint(*(end()-1), *(begin())); } */ return Position::INVALID; }
Position GeomHelper::crossPoint(const Boundary& b, const PositionVector& v) { if (v.intersects(Position(b.xmin(), b.ymin()), Position(b.xmin(), b.ymax()))) { return v.intersectsAtPoint( Position(b.xmin(), b.ymin()), Position(b.xmin(), b.ymax())); } if (v.intersects(Position(b.xmax(), b.ymin()), Position(b.xmax(), b.ymax()))) { return v.intersectsAtPoint( Position(b.xmax(), b.ymin()), Position(b.xmax(), b.ymax())); } if (v.intersects(Position(b.xmin(), b.ymin()), Position(b.xmax(), b.ymin()))) { return v.intersectsAtPoint( Position(b.xmin(), b.ymin()), Position(b.xmax(), b.ymin())); } if (v.intersects(Position(b.xmin(), b.ymax()), Position(b.xmax(), b.ymax()))) { return v.intersectsAtPoint( Position(b.xmin(), b.ymax()), Position(b.xmax(), b.ymax())); } throw 1; }