Триангуляция многоугольника

Алгоритм триангуляции простого невыпуклого многоугольника методом "отрезания ушей".

// Триангуляция
function triangulate() {
  // Пока не останется три вершины
  while (polygon.length >= 3) {
    // Проверяем два условия: является ли внутренней диагональю и нет ли вершины внутри отсекаемого треугольника
    if (isLeft(polygon[0], polygon[1], polygon[2]) && !hasPointOfPolygon(polygon)) {
      // если да, то рисуем треугольник и выбрасываем отсеченную вершину из многоугольника
      drawTriangle(polygon[0], polygon[1], polygon[2]);
      polygon.splice(1, 1);
    } else {
      // если нет, то сдвигаемся на одну вершину
      const tmp = polygon[0];
      polygon.shift();
      polygon.push(tmp);
    }
  }
}