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

Вход на сайт

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

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

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

Я код на C++ набрал сам. Строил кривую Безье, но "прилипал" к нулю. То есть я задаю точки далеко от нуля, а он строил из нуля, а потом только обходил предложенные точки. Потом я нашёл Ваш сайт и эту статью. Оказалось, что я забыл возвести t в...
просто я не так понял, здесь мы вращаем точки куба что вращает сам куб. Мне нужно вращать просто 3д объект , данный способ не подходит
Задавайте объект в мировых координатах. Вращайте его относительно мировой системы координат. А при отрисовке преобразуйте в экранные координаты. Посмотрите пример преобразования в экранные координаты.
Это вращение по мировым осям ? Если да то как сделать по осям объекта ?
Добрый вечер! Область прорисовки остается пустой. Чего-то не хватает. Объясните плз, чего? Рамиль.

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

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