Допустим, у меня есть (выпуклый) многоугольник с вершинами 0..n-1. Я хочу разбить этот многоугольник пополам, скажем, между вершинами i и j. Вершины i и j должны появляться в обоих многоугольниках.
Насколько я могу судить, есть только два случая. Тот, где я J. я никогда не равен j (и при этом они никогда не смежны).
Я храню свои вершины как vector<Point> poly
. Можно предположить, что Point
- это просто базовая структура с двумя двойными числами x
и y
с точками, последовательно проиндексированными в порядке CCW.
Если i
Вот код, который я использую, но, похоже, он не работает правильно (пусть j == closestIndex):
if (i < closestIndex) {
lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.begin() + closestIndex + 1);
upperPoly.insert(upperPoly.end(), poly.begin() + closestIndex, poly.end());
upperPoly.insert(upperPoly.end(), poly.begin(), poly.begin() + i + 1);
} else {
lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.end());
lowerPoly.insert(lowerPoly.end(), poly.begin(), poly.begin() + closestIndex + 1);
upperPoly.insert(upperPoly.end(), poly.begin() + closestIndex, poly.begin() + i + 1);
}