Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.06.2019
Сообщений: 16

Триангуляция монотонного многоугольника (полигона)

22.12.2019, 16:49. Показов 3016. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Пытаюсь сделать триангуляцию монотонного многоугольника в C++ Builder (RAD Studio).

Суть такова: на форме кликаются точки, при нажатии на кнопку Button точки соединяются в многоугольник и сразу же происходит триангуляция.

Часть кода готова. Есть проблема с самой функцией триангуляции. Хочу попросить о помощи, может кто-нибудь поможет немного дописать, изменить что-нибудь при необходимости, чтобы работало всё, если кому не трудно это сделать. Буду очень благодарен.

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <vector>
#include <stack>
#pragma hdrstop
 
#include "Unit10.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm10 *Form10;
 
int ii=0;
struct vertex
{
    TPoint point; int k;
    vertex(TPoint b, int m)
    {
        point=b;
        k=m;
    }
    vertex(){}
 };
vector<TPoint> s(0);
//---------------------------------------------------------------------------
__fastcall TForm10::TForm10(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
bool IsValidDiagonal()
{
 
}
 
void TriangulateMonotonePolygon(vector<TPoint>& s)
{
   vertex [n] V = new vertex(s); // массив вершин P, отсортированный по y-координате в порядке убывания.
   stack S = new stack();
   S.push(V[1]);
   S.push(V[2]);
   for (int j=3; j < n-1; j++)
      if (V[j] = S.peek())
         while (!S.empty())
            if (S.size() != 1)
               Insert edge(V[j], S.peek()) in D
            S.pop();
         S.push(V[j-1]);
         S.push(V[j]);
      else
         vertex(last) = S.peek();
         S.pop();
         while (IsValidDiagonal(edge(V[j], S.peek()), last)) //проверка возможности построения
                                                             //диагонали — предикат "левый поворот"
            last = S.peek();
            S.pop();
            Insert edge(V[j], last) in D
         S.push(last);
         S.push(V[j]);
   S.pop()
   while (!S.empty())
      if (S.size() != 1)
         Insert edge(V[j], S.peek()) in D
      S.pop();
}
//---------------------------------------------------------------------------
void __fastcall TForm10::Button1Click(TObject *Sender)
{
HDC hdc=GetDC(Form10->Handle);
for (int i = 0; i < ii; i++)
{
MoveToEx(hdc,s[i].x,s[i].y,NULL);
LineTo(hdc,s[(i+1)%ii].x,s[(i+1)%ii].y);
}
TriangulateMonotonePolygon(s);
}
//---------------------------------------------------------------------------
void __fastcall TForm10::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
HDC hdc=GetDC(Form10->Handle);
SetPixel(hdc,X,Y,clBlack);
s.push_back(TPoint(X,Y));
ii++;
}
//---------------------------------------------------------------------------
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.12.2019, 16:49
Ответы с готовыми решениями:

Триангуляция многоугольника (полигона)
Здравствуйте! Есть проблема с организацией алгоритма триангуляции многоугольника. Код я писала не с нуля, нашла примеры, все скрестила...

Закраска для выпуклого и монотонного многоугольника
реализовать алгоритм закраски для выпуклого и монотонного многоугольника.

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2019, 16:49
Помогаю со студенческими работами здесь

Триангуляция многоугольника ушным методом
Приветствую. Нашел текст с описанием триангулции, который было легко понять. Сделал как написано. Работает, но не для всех...

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

рисование многоугольника(полигона)
Доброго времени суток!!!! Мне необходимо организовать рисование многоугольника(полигона) и делать всё это мышкой,дак вот есть метод...

QPainterPath. Триангуляция замкнутого многоугольника с дырками
Есть замкнутый многоугольник, в котором могут быть &quot;дырки&quot;, заданный средствами QPainterPath. Если ли в Qt какой - то штатный механизм...

Скруглить углы многоугольника (полигона)
В общем есть задание построить многоугольник любой формы и закруглить его углы. Есть часть кода на построение многоугольника любой формы,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru