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