# Returns distance to segment : Geometry « 2D Graphics GUI « Java

Returns distance to segment

```
import java.awt.Point;

public class Util{

/**
* Returns distance to segment
*
* @param ss
*            segment start point
* @param se
*            segment end point
* @param p
*            point to found closest point on segment
* @return distance to segment
*/
public static double getDistanceToSegment(Point ss, Point se, Point p)
{
return getDistanceToSegment(ss.x, ss.y, se.x, se.y, p.x, p.y);
}

/**
* Returns distance to segment
*
* @param sx1
*            segment x coord 1
* @param sy1
*            segment y coord 1
* @param sx2
*            segment x coord 2
* @param sy2
*            segment y coord 2
* @param px
*            point x coord
* @param py
*            point y coord
* @return distance to segment
*/
public static double getDistanceToSegment(int sx1, int sy1, int sx2, int sy2, int px, int py)
{
Point closestPoint = getClosestPointOnSegment(sx1, sy1, sx2, sy2, px, py);
return getDistance(closestPoint.x, closestPoint.y, px, py);
}
/**
* Returns distance between two 2D points
*
* @param point1
*            first point
* @param point2
*            second point
* @return distance between points
*/
public static double getDistance(Point point1, Point point2)
{
return getDistance(point1.x, point1.y, point2.x, point2.y);
}

/**
* Returns distance between two sets of coords
*
* @param x1
*            first x coord
* @param y1
*            first y coord
* @param x2
*            second x coord
* @param y2
*            second y coord
* @return distance between sets of coords
*/
public static double getDistance(float x1, float y1, float x2, float y2)
{
// using long to avoid possible overflows when multiplying
double dx = x2 - x1;
double dy = y2 - y1;

// return Math.hypot(x2 - x1, y2 - y1); // Extremely slow
// return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); // 20 times faster than hypot
return Math.sqrt(dx * dx + dy * dy); // 10 times faster then previous line
}

/**
* Returns closest point on segment to point
*
* @param ss
*            segment start point
* @param se
*            segment end point
* @param p
*            point to found closest point on segment
* @return closest point on segment to p
*/
public static Point getClosestPointOnSegment(Point ss, Point se, Point p)
{
return getClosestPointOnSegment(ss.x, ss.y, se.x, se.y, p.x, p.y);
}

/**
* Returns closest point on segment to point
*
* @param sx1
*            segment x coord 1
* @param sy1
*            segment y coord 1
* @param sx2
*            segment x coord 2
* @param sy2
*            segment y coord 2
* @param px
*            point x coord
* @param py
*            point y coord
* @return closets point on segment to point
*/
public static Point getClosestPointOnSegment(int sx1, int sy1, int sx2, int sy2, int px, int py)
{
double xDelta = sx2 - sx1;
double yDelta = sy2 - sy1;

if ((xDelta == 0) && (yDelta == 0))
{
throw new IllegalArgumentException("Segment start equals segment end");
}

double u = ((px - sx1) * xDelta + (py - sy1) * yDelta) / (xDelta * xDelta + yDelta * yDelta);

final Point closestPoint;
if (u < 0)
{
closestPoint = new Point(sx1, sy1);
}
else if (u > 1)
{
closestPoint = new Point(sx2, sy2);
}
else
{
closestPoint = new Point((int) Math.round(sx1 + u * xDelta), (int) Math.round(sy1 + u * yDelta));
}

return closestPoint;
}
}

```

### Related examples in the same category

 1 Collection of geometry utility methods 2 Unions Rectangle2D 3 Interpolates points given in the 2D plane 4 Returns distance between two sets of coords 5 Returns distance between 3D set of coords 6 Returns closest point on segment to point 7 Calculate Angle From 8 Hexagon demo 9 Implements an Vector in 3D space. 10 Implementation of the 4 dimensional vector. 11 Quaternion 12 Circle shape 13 Geometry Utilities 14 This is a Polygon that allows the user to flip and swap the points along it's axis. 15 Fast trigonometric operations 16 A class to represent a latitude and longitude 17 An undirected graph that keeps track of connected components (groups). 18 Generates n logarithmically-spaced points between d1 and d2 using the provided base. 19 Returns a dimension where width and height are inside the bounds of the maxWidth and maxHeight parameters