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

Вход на сайт

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

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

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

Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)
как исправить это , сделал все по инструкции
Timer1 - выдает ошибку. Использовал IdleTimer1, работает! unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, OpenGLContext, GL, GLU; type { TForm1 } TForm1 =...
в коде присутствуют ошибки! // Считываем координаты procedure TForm1.getCoords(Sender: TObject); var j1:longint; begin n:= StrToInt(Edit2.Text); //число точек s1:=Edit1.Text; s2:=''; i := 1; j:=1; k:=0...

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

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

Одним из тех объектов, которые удобно строить при помощи вероятностных распределений является папоротник.

Основная заключается в том, чтобы, зафиксировав какую-либо начальную точку, затем циклически совершать афинное преобразование системы координат, в которой строится точка.То есть, если на определённом шаге цикла имеется точка А с координатами (х0,y0), то при следующей итерации цикла изображается точка В, с координатами:
( а*х0+в*y0+с , d*х0+e*y0+f ).
Таким образом получаем новую систему координат: точку В через "старую" точку А.

Для прорисовки фрактала следует нажать кнопку "Fern"

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

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls;
 
type
 
{ TForm1 }
 
TForm1 = class(TForm)
Fern: TButton;
PaintBox1: TPaintBox;
procedure FernClick(Sender: TObject);
procedure DrawFern();
private
{ private declarations }
public
{ public declarations }
end;
 
var
Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FernClick(Sender: TObject);
begin
PaintBox1.Canvas.Brush.Color := RGBToColor(0,0,0);
PaintBox1.Canvas.Rectangle(0,0, PaintBox1.Width, PaintBox1.Height);//заливка фона
DrawFern();
end;
procedure TForm1.DrawFern();
const
iter = 400000; //Количество итераций
 
var
t, x, y: Real;
p: Real;
k: LongInt;
Mx, My, r: Integer;
 
begin
Mx := PaintBox1.Width div 2; //определение координаты x
My := PaintBox1.Height-40; //определение координаты у
r:= trunc(0.1*My);
Randomize;
x:=1.0;
y:=0.0;
for k := 1 to iter do
begin
p:=Random;
t:=x;
if p <= 0.85 then //построение верхней части
begin
x:=0.84*x-0.045*y;
y:=0.045*t+0.86*y+1.6;
end
else
if p <= 0.92 then //построение левого листа
begin
x:=0.25*x-0.26*y;
y:=0.23*t+0.25*y+1.6;
 
end //построение правого листа
else if p <= 0.99 then
begin
x:=-0.135*x+0.28*y;
y:=0.26*t+0.245*y+0.44;
end
else
begin //построение стебля
x:=0.0;
y:=0.16*y;
end;
PaintBox1.Canvas.Pixels[Mx+Round(r*x), My-Round(r*y)+35]:=RGBToColor(0, 255, 150);
end
end;
end.

Прикрепленный файлРазмер
Paporotnik.rar872.77 кб