Разрез многоугольника диагональю



Дан многоугольник и индексы вершин, образующих диагональ
Необходимо разделить многоугольник на две части, лежащие с разных сторон относительно диагонали

    Создадим два списка. Пройдём по вершинам от первой исходной ко второй и добавим все рассматриваемые вершины в первый список. Пройдём от второй к первой и добавим все рассматриваемые вершины во второй список.

Асимптотика O(n).

Листинг C++

void cut_polygon_for_edge (vector < point > p, int i1, int i2, 
            vector < point > &p1, vector < point > &p2)
{
    int i;    
    int n = p.size();

    for (i = i1; i != (i2 + 1) % n; i = (i + 1) % n)
        p1.push_back (p[i]);

    for (i = i2; i != (i1 + 1) % n; i = (i + 1) % n)
        p2.push_back (p[i]);
}

22.06.2007, 15:41

По всем вопросам обращаться: rumterg@gmail.com