Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 23.02.2018
Сообщений: 45
1

Триангуляция выпуклого многоугольника из точек

13.09.2018, 20:14. Показов 3427. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
все никак не могу понять эти алгоритмы по разбиванию многоугольников до конца. но большую часть работы уже сделал.
-сперва собираю все возможные отрезки.
-затем сортирую их между собой на касание, если отрезок пересекается с другим отрезком, то его отбраковываем и в дальнейшем кастинге он не участвует.

в итоге остаются только правильные отрезки. последняя задача - получить число треугольников и индексы их точек, например, первый треугольник имеет точки A, B, D. есть идеи?
на всякий случай даю имеющийся код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
    struct segment
    {
        int id0;
        int id1;
    };
 
    point vets[] =
    {
        { 10, 100 },
        { 100, 10 },
        { 300, 30 },
        { 400, 100 },
        { 340, 180 },
        { 25, 150 },
    };
 
    //Заполняем структуру
    segment seg[140];
    int n_seg = 0;
 
    for (int p = 0; p < 6; p++)
    {
        for (int d = 0; d < 6; d++)
        {
            if (p == d) continue;
            seg[n_seg] = { p, d };
            n_seg++;
        }
    }
 
    //Черновая рисовка
    for (int i = 0; i < n_seg; i++)
    {
        drawLine(vets[seg[i].id0].x, vets[seg[i].id0].y, vets[seg[i].id1].x, vets[seg[i].id1].y, 1.4f);
    }
 
    //Сортировка
    bool *t_list = new bool[n_seg];
 
    for (int p = 0; p < n_seg; p++)
    {
        t_list[p] = false;
        for (int d = 0; d < n_seg; d++)
        {
            if (p == d || t_list[d]) continue;
            if (seg[p].id0 == seg[d].id0 || seg[p].id1 == seg[d].id1 || seg[p].id0 == seg[d].id1 || seg[p].id0 == seg[d].id1) continue;
 
            t_list[p] = IsLinesCross(
                vets[seg[p].id0].x, vets[seg[p].id0].y, vets[seg[p].id1].x, vets[seg[p].id1].y,
                vets[seg[d].id0].x, vets[seg[d].id0].y, vets[seg[d].id1].x, vets[seg[d].id1].y);
 
            if (t_list[p]) break;
 
        }
    }
 
    //Хит-парад отрезков
    for (int i = 0; i < n_seg; i++)
    {
        if(!t_list[i])
        drawLine(vets[seg[i].id0].x, vets[seg[i].id0].y, vets[seg[i].id1].x, vets[seg[i].id1].y, 1.5f);
    }
 
    delete t_list;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2018, 20:14
Ответы с готовыми решениями:

Триангуляция многоугольника
Добрый вечер. Ни у кого случайно нет алгоритма для триангуляции ПРОИЗВОЛЬНОГО многоугольника?...

Площадь выпуклого многоугольника
Доброго времени суток! Собственно, задача звучит как: &quot;Расчет площади выпуклого многоугольника при...

Центр тяжести выпуклого многоугольника
Итак народ , необходимо найти центр тяжести выпуклого многоугольника заданного своими вершинами в...

Площадь выпуклого многоугольника методом триангуляции
ребят помогите разработать программу для расчёта площади выпуклого многоугольника методом...

2
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
14.09.2018, 13:46 2
Цитата Сообщение от NoStark Посмотреть сообщение
алгоритмы по разбиванию многоугольников
Я может быть чего-то не понимаю, но любой выпуклый многоугольник можно разбить на треугольники, тупо проведя отрезки из одной вершины во все остальные.
0
0 / 0 / 0
Регистрация: 23.02.2018
Сообщений: 45
14.09.2018, 18:04  [ТС] 3
Цитата Сообщение от Kukuxumushu Посмотреть сообщение
любой выпуклый многоугольник можно разбить на треугольники, тупо проведя отрезки из одной вершины во все остальные.
ну, или так. в целом, это уже не является проблемой, ибо я застрял на стадии получения составляющих точек каждого треугольника
0
14.09.2018, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2018, 18:04
Помогаю со студенческими работами здесь

Найти площадь многоугольника (не обязательно выпуклого)
Найти площадь многоугольника (не обязательно выпуклого), заданного координатами своих вершин на...

Найти все точки, являющиеся вершинами выпуклого многоугольника
Дано: множество координат точек на плоскости  (х1, у1), (х2, у2), ..., (хn, уn)  - пары...

Есть файл, в котором заданные координаты вершин выпуклого многоугольника на плоскости
Есть файл, в котором заданные координаты вершин выпуклого многоугольника на плоскости. Написать...

Даны точки на плоскости: расположить их так, чтобы они образовывали вершины выпуклого многоугольника
На плоскости заданы N точек своими декартовыми координатами. Расположить эти точки в таком порядке,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru