makeClockwise static method

void makeClockwise(
  1. Float32List polygon
)

Implementation

static void makeClockwise(Float32List polygon) {
  final Float32List vertices = polygon;
  final int verticeslength = polygon.length;

  double area = vertices[verticeslength - 2] * vertices[1] -
          vertices[0] * vertices[verticeslength - 1],
      p1x = 0.0,
      p1y = 0.0,
      p2x = 0.0,
      p2y = 0.0;
  final int n = verticeslength - 3;
  for (int i = 0; i < n; i += 2) {
    p1x = vertices[i];
    p1y = vertices[i + 1];
    p2x = vertices[i + 2];
    p2y = vertices[i + 3];
    area += p1x * p2y - p2x * p1y;
  }
  if (area < 0) return;
  final int lastX = verticeslength - 2, nn = verticeslength >> 1;
  for (int i = 0; i < nn; i += 2) {
    final double x = vertices[i], y = vertices[i + 1];
    final int other = lastX - i;
    vertices[i] = vertices[other];
    vertices[i + 1] = vertices[other + 1];
    vertices[other] = x;
    vertices[other + 1] = y;
  }
}