31
Май

Программы на Pascal (Паскаль): снежинка и кривая Коха, фракталы

Категория: Просто Я

Всем привет! У всех студентов, и у меня в том числе, началась летняя сессия. Все сдают зачеты и лабы, закрывают пропуски и т.п.

Я давно сдал все лабы, и у меня осталось несколько программ, которые, думаю, многим еще пригодятся. Все они в основном на Паскале и  Делфи. Я писал уже о методе Эйлера и Адамса 4-го порядка на Паскале. В этом посте пойдет речь о снежинке Коха на Паскале (Pascal).

Фракталы наверняка вам знакомы и я не буду писать о том, что это такое и с чем их "едят". Давайте просто сразу перейдем к коду. Он на языке Паскаль и адаптирован под PascalABC (скачать PascalABC можно с официального сайта тут). Это не мой код, я нашел его на одном из форумов. Я лишь чуть-чуть изменил его, проще говоря, удалил лишнее.

Снежинка Коха на Паскале (Pascal)

uses GraphABC;

procedure Draw(x, y, l, u : Real; t : Integer);

procedure Draw2(Var x, y: Real; l, u : Real; t : Integer);

begin
Draw(x, y, l, u, t);
x := x + l*cos(u);
y := y - l*sin(u);
end;

begin
if t > 0 then
begin
l := l/3;
Draw2(x, y, l, u, t-1);
Draw2(x, y, l, u+pi/3, t-1);
Draw2(x, y, l, u-pi/3, t-1);
Draw2(x, y, l, u, t-1);
end
else
Line(Round(x), Round(y), Round(x+cos(u)*l), Round(y-sin(u)*l))
end;

begin
SetWindowSize(425,500);
SetWindowCaption('Фракталы: Снежинка Коха');
Draw(10, 354, 400, pi/3, 4);
Draw(410, 354, 400, pi, 4);
Draw(210, 8, 400, -pi/3, 4);
end.

Вот такая снежинка у вас должна получиться:

Вкратце про параметры процедуры Draw:

1 и 2 параметр - это координаты начальной точки, откуда будет рисоваться линия;

3 - длина линии;

4 - полярный угол;

5 - количество шагов.

Можете поэкспериментировать с количеством шагов, и получится что-то вроде этого:

Кривая Коха на Паскале (Pascal)

Как вы поняли, снежинка рисуется из 3-х кривых Коха. И для того чтобы нарисовать кривую Коха, используем тот же код с разницей лишь той, что процедура Draw вызывается один раз и с другими параметрами.


uses GraphABC;

procedure Draw(x, y, l, u : Real; t : Integer);

procedure Draw2(Var x, y: Real; l, u : Real; t : Integer);

begin
Draw(x, y, l, u, t);
x := x + l*cos(u);
y := y - l*sin(u);
end;

begin
if t > 0 then
begin
l := l/3;
Draw2(x, y, l, u, t-1);
Draw2(x, y, l, u+pi/3, t-1);
Draw2(x, y, l, u-pi/3, t-1);
Draw2(x, y, l, u, t-1);
end
else
Line(Round(x), Round(y), Round(x+cos(u)*l), Round(y-sin(u)*l))
end;

begin
SetWindowSize(425,500);
SetWindowCaption('Фракталы: Кривая Коха');
Draw(10, 254, 400, 0, 4);
end.

Как видите, изменилось мало чего: полярный угол стал равен нулю и начальная точка смещена немного вверх. И вот что получилось:

Разбираться в коде я не стал, но если возникнут вопросы - пишите в комментариях. Вместе разберемся.

Всем пока и удачи на экзаменах :)

Мой паблик в Вконтакте :)

Комментарии к записи Программы на Pascal (Паскаль): снежин...