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

Вход на сайт

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

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

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

Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

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

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

При запуске программы на форме строится фрактал Дерево Пифагора.

Алгоритм:
1) Строим вертикальный отрезок
2) Из верхнего конца этого отрезка рекурсивно строим еще 2 отрезка под определенными углами
3) Вызываем функцию построения двух последующих отрезков для каждой ветви дерева

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

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,OpenGL;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure SetDCPixelFormat (hdc: HDC);
    procedure FormPaint(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
   procedure fun(x,y,l,a:real);
var
  Form1: TForm1;
  hrc: HGLRC;
  DC:HDC;
  n,m:real;
  max,color:integer;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 DC:=GetDC(Handle);
  SetDCPixelFormat(DC);
  hrc:= wglCreateContext(DC);
  wglMakeCurrent(DC, hrc);
  max:=1;
  n:=2;       //углы поворота
  m:=8;
end;
 
procedure TForm1.SetDCPixelFormat (hdc: HDC);
 var pfd: TPixelFormatDescriptor; nPixelFormat: Integer;
begin
  FillChar (pfd, SizeOf (pfd), 0);
  nPixelFormat:= ChoosePixelFormat (hdc, @pfd);
  SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
glClearColor(0.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT);
glLineWidth(1);
glColor3f(1,0,0);
 
fun(0, 200, 200, Pi/2);    // Вызываем рекурсивную функцию построения фрактала
 
glRotatef(45,0,0,1);
SwapBuffers(DC);
wglMakeCurrent (0, 0);
end;
 
 
procedure fun(x,y,l,a:real);
begin
 if L>max then          // условие конца рекурсии
   begin
     L:=L*0.7;
     glBegin(GL_LINE_STRIP);
       glVertex2f(x/300,y/300);                             // просчет координат линий
       glVertex2f((x+L*cos(a))/300,(y-L*sin(a))/300);
     glEnd;
     x:=x+L*cos(a);                 // просчет координат следующих точек
     y:=y-L*sin(a);
     fun(x,y,L,a+Pi/n);              // рекурсия
     fun(x,y,L,a-Pi/m);
   end;
end;
 
end.

Прикрепленный файлРазмер
Демонстрационный пример Дерево Пифагора375.87 кб