double slcDetermineClockwiseness( double *vertexlist, size_t vertexcount ) { size_t i, rmin; double minx, miny, px, py; double *prev, *next, *corner; rmin = 0; minx = DBL_MAX; miny = DBL_MAX; for( i = 0 ; i < vertexcount ; i++ ) { py = vertexlist[(i<<1)+1]; if( py > miny ) continue; px = vertexlist[(i<<1)+0]; if( py == miny ) { if( px < minx ) continue; } rmin = i; minx = px; miny = py; } corner = &vertexlist[ rmin * 2 ]; prev = &vertexlist[ ( ( rmin + vertexcount - 1 ) % vertexcount ) * 2 ]; next = &vertexlist[ ( ( rmin + 1 ) % vertexcount ) * 2 ]; return ( ( next[0] - prev[0] ) * ( corner[1] - prev[1] ) ) - ( ( corner[0] - prev[0] ) * ( next[1] - prev[1] ) ); }