Уроки, алгоритмы, программы, примеры

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Borland Delphi 7.0

Демонстрация триангуляции многоугольника.
Рисуем многоугольник, разделяем его на треугольники.
Для запуска программы достаточно запустить файл .exe.

Для начала работы нужно щёлкнуть на форму, левой кнопкой мыши. При последующем нажатии на форму будет изменятся цвет треугольников.

Код программы: 

unit Trianguliation;
 
interface
 
uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls;
 
type
    TForm1 = class(TForm)
        PaintBox1: TPaintBox;
        procedure PaintBox1Click(Sender: TObject);
        function V(p1, p2, p3: TPoint): Integer;
    end;
 
var
    Form1: TForm1;
    Brush: TBrush;
    a: Array [0..11] of TPoint; 
    used: Array [0..30] of Integer; 
    b: Array [0..30] of Array [0..2] of Tpoint;
    i, j, k, m, n, cnt, ok: Integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.PaintBox1Click(Sender: TObject);
begin
    with PaintBox1.Canvas do begin
 
        a[0] := Point(100, 400); 
        a[1] := Point(100, 100);
        a[2] := Point(200, 600);
        a[3] := Point(300, 400);
        a[4] := Point(200, 300);
        a[5] := Point(500, 300);
        a[6] := Point(300, 500);
        a[7] := Point(600, 500);
        a[8] := Point(600, 0);
        a[9] := Point(400, 100);
        a[10] := Point(0, 0);
 
        Polygon(a); 
 
        for i := 0 to 30 do     
            used[i] := 0;
        cnt := 11; n := 0;
        i := 0; j := 1; k := 2;
 
        while(cnt > 3) do begin    
            cnt := 0; ok := 0;
            if(V(a[i], a[j], a[k]) < 0) then begin   
                ok := 1;
                for m := 0 to 10 do begin           
                    if(used[m] = 0) and
                    (((V(a[i], a[j], a[m]) > 0) and (V(a[j], a[k], a[m]) > 0) and (V(a[k], a[i], a[m]) > 0)) or
                    ((V(a[i], a[j], a[m]) < 0) and (V(a[j], a[k], a[m]) < 0) and (V(a[k], a[i], a[m]) < 0))) then
                        ok := 0;
                end;
            end;
 
            if(ok = 1) then begin
 
                b[n][0] := a[i];
                b[n][1] := a[j];
                b[n][2] := a[k];
                n := n + 1;
                used[j] := 1;
                j := k;
 
                                for m := k + 1 to 21 do
                    if(used[m mod 11] = 0) then begin
                        k := m mod 11;
                        break;
                    end;
 
                for m := 0 to 10 do
                  if(used[m] = 0) then
                      cnt := cnt + 1;
            end
            else begin
                for m := i + 1 to 21 do
                    if(used[m mod 11] = 0) then begin
                        i := m mod 11;
                        break;
                    end;
                for m := j + 1 to 21 do
                    if(used[m mod 11] = 0) then begin
                        j := m mod 11;
                        break;
                    end;
                for m := k + 1 to 21 do
                  if(used[m mod 11] = 0) then begin
                    k := m mod 11;
                    break;
                  end;
            end;
            if(cnt = 0) then cnt := 4;
        end;
 
        i := 0;
 
        for m := 0 to 10 do
            if(used[m] = 0) then begin
            b[n][i] := a[m];
            i := i + 1;
          end;
        for i := 0 to n do begin   
            Brush.Color := RGB(Random(50000) mod 256, Random(50000) mod 256, Random(50000) mod 256);
            Polygon(b[i]);
        end;
    end;
end;
 
function TForm1.V(p1, p2, p3: TPoint): Integer;
begin
    Result := (p2.x - p1.x) * (p3.y - p1.y) - (p2.y - p1.y) * (p3.x - p1.x);
end;
 
end.

Прикрепленный файлРазмер
Исходный код и исполняемый файл159.81 кб