Я предполагаю, что вы уже упорядочили вершины, как вы описали выше, и что они действительно определяют выпуклый многоугольник.
Каждая вершина определяет горизонтальную линию. Для V вершин у вас будет набор из V линий. Откажитесь от любой строки, которая соответствует одному из следующих критериев:
- Вершина или вершины, определяющие эту линию, имеют / имеют самый высокий или самый низкий компонент Y (если одна вершина, эта линия пересекает многоугольник только в этой точке; если два, эта линия совпадает с ребром многоугольника)
- Если две вершины имеют равные координаты Y, в противном случае оставьте только одну из этих линий (она дублируется).
Результат будет напоминать «полосу» многоугольника.
Каждая горизонтальная линия пересекает многоугольник в двух точках. Одним из них является его определяющая вершина. Другая - это либо другая вершина, либо точка на отрезке, определяемом двумя вершинами. Вы можете определить, в чем дело, достаточно просто - просто сравнение Y-координат. Координаты пересечения с отрезком тоже легкая математика, которую я оставляю вам.
Каждое пересечение определяет вертикальный сегмент. Сегмент содержится внутри многоугольника (если он совпадает с ребром, вы можете его отбросить), а другой конец встречается либо с другой горизонтальной линией, либо с ребром многоугольника, если этот ребро само является горизонтальным. Определение случая опять-таки является вопросом простого сравнения координат. Наконец, может быть 0-2 дополнительных вертикальных сегмента, определенных вершинами с самой высокой и / или самой низкой координатами Y, если есть только одна из них.
Результирующая диаграмма теперь показывает каждую полосу с прямоугольным треугольником, обрезанным с каждого конца, если это возможно. Каждый треугольник должен соответствовать вашим критериям. Остальные области являются прямоугольниками; Нарисуйте произвольную диагональ, чтобы разделить каждый на два прямоугольных треугольника, соответствующих вашим критериям.
Вы сделали.