Триангуляция с количеством треугольников - (n-2)



Дано многоугольник в порядке обхода против часовой стрелки и количество точек
Разбить данный многоугольник на треугольники

Используем стнадартный рекурсивный алгоритм.
Основная идея его состоит в отрезании многоугольника на две части по хорде если это не треугольник.
Функция имеет вид triangulate(p,T).
T - массив результат - размер матрицы count x 3, содержит вершины триангуляции.
Функция рабивает многоугольник на n-2 треугольника.


Листинг C++

int count_triang=0;
void triangulate(polygon &p,point T[][3])
{
        if(p.n <= 3)
        {
                for(int i=0;i<p.n;++i)
                        T[count_triang][i]=p.p[i];
                ++count_triang;
                return;
        }
        int i,j;
        bool end=0;
        for(i=0;i<p.n && !end;++i)
                for(j=0;j<p.n && !end;++j)
                        if(DiagInPolygon(p,i,j)){ end=1;i=i-1; break;}
        polygon p1,p2;
        CutPolygonD(p,i,j,p1,p2);
        triangulate(p1,T);
        triangulate(p2,T);
}

23.06.2007, 14:46

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