private SubHyperplane<Euclidean2D> buildHalfLine(Vector2D start, Vector2D end,
boolean startIsVirtual) {
Line line = new Line(start, end);
double lower = startIsVirtual
? Double.NEGATIVE_INFINITY
: (line.toSubSpace(start)).getX();
double upper = startIsVirtual
? (line.toSubSpace(end)).getX()
: Double.POSITIVE_INFINITY;
return new SubLine(line, new IntervalsSet(lower, upper));
}