package org.osm2world.core.math; public class LineSegmentXZ { public final VectorXZ p1, p2; public LineSegmentXZ(VectorXZ p1, VectorXZ p2) { this.p1 = p1; this.p2 = p2; } public VectorXZ getCenter() { return GeometryUtil.interpolateBetween(p1, p2, 0.5); } /** * returns true if there is an intersection between this line segment and * the line segment defined by the parameters */ public boolean intersects(VectorXZ segmentP1, VectorXZ segmentP2) { // TODO: (performance): passing "vector TO second point", rather than // point2, would avoid having to calc it here - and that information // could be reused for all comparisons involving the segment return getIntersection(segmentP1, segmentP2) != null; } /** * returns the intersection between this line segment and * the line segment defined by the parameters; * null if none exists. */ public VectorXZ getIntersection(VectorXZ segmentP1, VectorXZ segmentP2) { // TODO: (performance): passing "vector TO second point", rather than // point2, would avoid having to calc it here - and that information // could be reused for all comparisons involving the segment return GeometryUtil.getTrueLineSegmentIntersection( segmentP1, segmentP2, p1, p2); } /** * returns the distance between this segment's two end nodes */ public double getLength() { return VectorXZ.distance(p1, p2); } @Override public String toString() { return "[" + p1 + ", " + p2 + "]"; } }