/**
*
*/
package icy.type.point;
import java.awt.geom.Point2D;
import java.util.List;
/**
* Utilities for Point2D class.
*
* @author Stephane
*/
public class Point2DUtil
{
/**
* Test if the 2 specified points are <code>connected</code>.<br>
* Points are considered connected if max(deltaX, deltaY) <= 1
*/
public static boolean areConnected(Point2D p1, Point2D p2)
{
return Math.max(Math.abs(p2.getX() - p1.getX()), Math.abs(p2.getY() - p1.getY())) <= 1;
}
/**
* Returns the L1 distance between 2 points
*/
public static double getL1Distance(Point2D p1, Point2D p2)
{
return Math.abs(p2.getX() - p1.getX()) + Math.abs(p2.getY() - p1.getY());
}
/**
* Returns the square of the distance between 2 points.
*/
public static double getSquareDistance(Point2D pt1, Point2D pt2)
{
double px = pt2.getX() - pt1.getX();
double py = pt2.getY() - pt1.getY();
return (px * px) + (py * py);
}
/**
* Returns the distance between 2 points.
*/
public static double getDistance(Point2D pt1, Point2D pt2)
{
return Math.sqrt(getSquareDistance(pt1, pt2));
}
/**
* Returns the distance between 2 points using specified scale factor for x/y dimension.
*/
public static double getDistance(Point2D pt1, Point2D pt2, double factorX, double factorY)
{
double px = (pt2.getX() - pt1.getX()) * factorX;
double py = (pt2.getY() - pt1.getY()) * factorY;
return Math.sqrt(px * px + py * py);
}
/**
* Returns the total distance of the specified list of points.
*/
public static double getTotalDistance(List<Point2D> points, double factorX, double factorY, boolean connectLastPoint)
{
final int size = points.size();
double result = 0d;
if (size > 1)
{
for (int i = 0; i < size - 1; i++)
result += getDistance(points.get(i), points.get(i + 1), factorX, factorY);
// add last to first point distance
if (connectLastPoint)
result += getDistance(points.get(size - 1), points.get(0), factorX, factorY);
}
return result;
}
}