Суббота, 27.04.2024, 02:14
Приветствую Вас Гость | RSS
Авторизация
Статистика


Rambler's Top100


Яндекс.Метрика
Контакты
356118831
Mr_Ser_Win
Поиск
Архив записей
Календарь
«  Май 2011  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
3031
Реклама

Книжный портал

Блог

Главная » 2011 » Май » 25 » Лист папоротника
21:45
Лист папоротника
Лист папоротника

Построение изображения листа папоротника при помощи фракталов.

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

Основная идея этого метода заключается в том, чтобы, зафиксировав какую-либо начальную точку, далее циклически совершать афинное преобразование системы координат,в которой точка строится.То есть, если на определённом шаге цикла имеется точка точка А с координатами (х0,y0), то при следующей итерации цикла изображается точка В, чьи координаты имеют вид ( а*х0+в*y0+с , d*х0+e*y0+f ). Таким образом наблюдается явное выражение "новой" системы координат(точка В) через "старую"(точка А).
В свою очередь коэффициенты преобразования систем координат выбираются в зависимости от попадения некоторой СЛУЧАЙНОЙ ВЕЛИЧИНЫ в соответствующий диапазон значений.
В данном примере случайная величина принимает значения из отрезка от 0 до 1.
Выбраны следующие диапазоны для этой случайной величины:
от 0 до 0.85 - соответствует преобразованию множества точек,отвечающих за "густоту" и "высоту" листа папоротника.
от 0.85 до 0.92 - рисует листики слева от стебля
от 0.92 до 0.99 - рисует листики справа от стебля
остальное - изображение стебля


unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
 Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
 Buttons, ExtCtrls;
 
type
 
 { TForm1 }
 
 TForm1 = class(TForm)
 BitBtn1: TBitBtn;
 PaintBox1: TPaintBox;
 procedure BitBtn1Click(Sender: TObject);
 procedure draw();
 private
 { private declarations }
 public
 { public declarations }
 end; 
 
var
 Form1: TForm1; 
 
implementation
 
{ TForm1 }
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 draw();
 
end;
 
 
 
 
 
procedure Tform1.draw();
 
const
 iterations = 50000; //Кол-во итераций
 
var
 t, x, y: real;
 p: real;//CЛУЧАЙНАЯ ВЕЛИЧИНА
 k: longint;
 mid_x, mid_y, radius: integer;
 
begin
 mid_x := paintbox1.width div 2;
 mid_y := paintbox1.height -100 ;
 radius := trunc(0.1 * mid_y);
 randomize;
 x := 1.0;
 y := 0.0;
 for k := 1 to iterations 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[mid_x+round(radius*x), mid_y-round(radius*y)+35]:=clGreen
 end
end;
 
 
 
 
 
 
initialization
 {$I unit1.lrs}
 
end.

Материал  позаимствован с сайта 

Просмотров: 687 | Добавил: Mr_Ser_Win | Теги: Фракталы | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Получить бонус WMR

Вы можете получить WMR-бонус в размере 0,01-0,10 WMR на свой кошелек 1 раз в сутки

Кошелек
Код Защитный код

Обмен Webmoney



Получить больше бонусов
Помощь сайту

Облако тегов
Реклама
Качественный хостинг
Бесплатная раскрутка сайтов и блогов - YouRaise.Ru
Начать Заработок на Блоге
Хранилище фотографий фото хостинг Храни фото здесь!
Драки: дом2 драки
обмен играми Все для геймера!
А ты играл в XBOX 360? продажа развивающие игры в твоем городе
AlfaInternet.Su - Регистрация сайта в каталогах поисковиках

Регистрация сайта в Каталогах
Ваше имя:
Ваш email:
Регистрация при поддержке AlfaInternet.Su
PR-CY.ru