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

Вход на сайт

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

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

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

добрый день! при попытке компиляции выдает Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPointSize" 1>Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPopMatrix" 1>Source.obj : error LNK2001: неразрешенный...
Можно точно вот эту программу просто наоборот типа:4,3,2,1,4 вот так надо двигаться
Здравствуйте. Спасибо за полезную инфу про уравнения а не матрицы. Во всём интернете только матрицы. У Вас опечатка в уравнении вращения по Z в координате Y= надо минус добавить И ещё. Все предыдущие уравнения можно подставить в последнее уравнение...
WebGL API Tutorial WebGL wiki Adding 2D content to a WebGL context

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

Рейтинг@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 кб