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

Home
Java
1.2D Graphics GUI
2.3D
3.Advanced Graphics
4.Ant
5.Apache Common
6.Chart
7.Class
8.Collections Data Structure
9.Data Type
10.Database SQL JDBC
11.Design Pattern
12.Development Class
13.EJB3
14.Email
15.Event
16.File Input Output
17.Game
18.Generics
19.GWT
20.Hibernate
21.I18N
22.J2EE
23.J2ME
24.JavaFX
25.JDK 6
26.JDK 7
27.JNDI LDAP
28.JPA
29.JSP
30.JSTL
31.Language Basics
32.Network Protocol
33.PDF RTF
34.Reflection
35.Regular Expressions
36.Scripting
37.Security
38.Servlets
39.Spring
40.Swing Components
41.Swing JFC
42.SWT JFace Eclipse
43.Threads
44.Tiny Application
45.Velocity
46.Web Services SOA
47.XML
Java » 2D Graphics GUI » Geometry 




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((intMath.round(sx1 + u * xDelta)(intMath.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 operationsFast 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
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.