package com.revolsys.geometry.graph;
import java.util.Comparator;
import com.revolsys.math.Angle;
/**
* The EdgeToAngleComparator class is used to return edges in a clockwise order.
*
* @author Paul Austin
* @param <T> The type of object stored on the edges in the graph.
*/
public class EdgeToAngleComparator<T> implements Comparator<Edge<T>> {
private static final EdgeToAngleComparator<?> INSTANCE = new EdgeToAngleComparator<>();
@SuppressWarnings("unchecked")
public static <T> EdgeToAngleComparator<T> get() {
return (EdgeToAngleComparator<T>)INSTANCE;
}
/**
* Construct a new EdgeToAngleComparator.
*/
public EdgeToAngleComparator() {
}
/**
* Compare the to angle for two edges.
*
* @param edge1 The first edge.
* @param edge2 The second edge.
* @see Angle#getTurn(double, double)
*/
@Override
public int compare(final Edge<T> edge1, final Edge<T> edge2) {
final double angle1 = edge1.getToAngle();
final double angle2 = edge2.getToAngle();
return Angle.getTurn(angle1, angle2);
}
}