public boolean isBetweenEndpoints(FramePoint2d point2d, double epsilon) { checkReferenceFrameMatch(point2d); return lineSegment.isBetweenEndpoints(point2d.getPoint(), epsilon); }
public boolean isBetweenEndpoints(Point2d point2d, double epsilon) { return isBetweenEndpoints(point2d.getX(), point2d.getY(), epsilon); }
private boolean isPointOnLineSegment(double x, double y) { double vx0 = x - endpoints[0].getX(); double vy0 = y - endpoints[0].getY(); double vx1 = endpoints[1].getX() - endpoints[0].getX(); double vy1 = endpoints[1].getY() - endpoints[0].getY(); double cross = vx0 * vy1 - vy0 * vx1; boolean pointIsOnLine = Math.abs(cross) < 1e-7; return pointIsOnLine && isBetweenEndpoints(x, y, 0.0); }
double[] possibleDistancesWithoutProj = new double[4]; possiblePointPairsWithProj[0] = edge2.isBetweenEndpoints(proj1AOnto2, 0) ? new Point2d[] {edgePoint1A, proj1AOnto2} : null; possiblePointPairsWithProj[1] = edge2.isBetweenEndpoints(proj1BOnto2, 0) ? new Point2d[] {edgePoint1B, proj1BOnto2} : null; possiblePointPairsWithProj[2] = edge1.isBetweenEndpoints(proj2AOnto1, 0) ? new Point2d[] {proj2AOnto1, edgePoint2A} : null; possiblePointPairsWithProj[3] = edge1.isBetweenEndpoints(proj2BOnto1, 0) ? new Point2d[] {proj2BOnto1, edgePoint2B} : null;
/** * Final phase helper method called if one range has a size of exactly one * @return The two points on each respective polygon which are closest to one another */ private static Point2d[] finalPhasePointAndEdge(Point2d edgePoint1, Point2d edgePoint2, Point2d lonePoint) { Point2d proj = GeometryTools.getOrthogonalProjectionOnLine(lonePoint, edgePoint1, edgePoint2); LineSegment2d p = new LineSegment2d(edgePoint1, edgePoint2); if (p.isBetweenEndpoints(proj, 0)) { return new Point2d[] {lonePoint, proj}; } else { return new Point2d[] {lonePoint, (lonePoint.distance(edgePoint1) < lonePoint.distance(edgePoint2)) ? edgePoint1 : edgePoint2}; } }
if (p.isBetweenEndpoints(proj, 0))