/** * Find the intersection point between a line segment and the current * partition plane. Takes advantage of some common situations like * horizontal and vertical lines to choose a 'nicer' intersection point. */ Vector2d intersectPartition(LineSegmentSide const &seg, coord_t fromDist, coord_t toDist) const { // Horizontal partition vs vertical line segment. if(hplane.slopeType() == ST_HORIZONTAL && seg.slopeType() == ST_VERTICAL) { return Vector2d(seg.from().origin().x, hplane.partition().origin.y); } // Vertical partition vs horizontal line segment. if(hplane.slopeType() == ST_VERTICAL && seg.slopeType() == ST_HORIZONTAL) { return Vector2d(hplane.partition().origin.x, seg.from().origin().y); } // 0 = start, 1 = end. coord_t ds = fromDist / (fromDist - toDist); Vector2d point = seg.from().origin(); if(seg.slopeType() != ST_VERTICAL) point.x += seg.direction().x * ds; if(seg.slopeType() != ST_HORIZONTAL) point.y += seg.direction().y * ds; return point; }