main/src/georegression/geometry/UtilPolygons2D_F64.java
public static boolean isCCW( List<Point2D_F64> polygon ) {
		final int N = polygon.size();
		int sign = 0;
		for (int i = 0; i < N; i++) {
			int j = (i+1)%N;
			int k = (i+2)%N;

			Point2D_F64 a = polygon.get(i);
			Point2D_F64 b = polygon.get(j);
			Point2D_F64 c = polygon.get(k);

			double dx0 = a.x-b.x;
			double dy0 = a.y-b.y;

			double dx1 = c.x-b.x;
			double dy1 = c.y-b.y;

			double z = dx0 * dy1 - dy0 * dx1;
			if( z > 0 )
				sign++;
			else
				sign--;
		}

		return sign < 0;
	}
public static boolean isCCW( List<Point2D_F64> polygon ) {
		final int N = polygon.size();
		int sign = 0;
		for (int i = 0; i < N; i++) {
			int j = (i+1)%N;
			int k = (i+2)%N;

			Point2D_F64 a = polygon.get(i);
			Point2D_F64 b = polygon.get(j);
			Point2D_F64 c = polygon.get(k);

			double dx0 = a.x-b.x;
			double dy0 = a.y-b.y;

			double dx1 = c.x-b.x;
			double dy1 = c.y-b.y;

			double z = dx0 * dy1 - dy0 * dx1;
			if( z > 0 )
				sign++;
			else
				sign--;
		}

		return sign < 0;
	}
public static boolean isCCW ( List < Point2D_F64 > polygon ) { final int N = polygon . size ( ) ; int sign = 0 ; for ( int i = 0 ; i < N ; i ++ ) { int j = ( i + 1 ) % N ; int k = ( i + 2 ) % N ; Point2D_F64 a = polygon . get ( i ) ; Point2D_F64 b = polygon . get ( j ) ; Point2D_F64 c = polygon . get ( k ) ; double dx0 = a . x - b . x ; double dy0 = a . y - b . y ; double dx1 = c . x - b . x ; double dy1 = c . y - b . y ; double z = dx0 * dy1 - dy0 * dx1 ; if ( z > 0 ) sign ++ ; else sign -- ; } return sign < 0 ; }
Returns true if the polygon is ordered in a counter-clockwise order.  This is done by summing up the interior
angles.

@param polygon List of ordered points which define a polygon
@return true if CCW and false if CW
Returns true if the polygon is ordered in a counter - clockwise order . This is done by summing up the interior angles .