Математика фракталов
Фрактал
правитьФрактал может быть нарисован, например, так:
procedure Draw({parameters});
begin
{drawing...}
if {condition} then
Draw({new parameters});
end;
begin
Draw({parameters});
end.
Например:
uses GraphABC;
const
Angle = -Pi / 4;
procedure RLine(x, y, x1, y1: real):=Line(Round(x), Round(y), Round(x1), Round(y1));
procedure Draw(x, y, l: real; iterations: integer);
begin
{drawing}
var lx := x + l * Cos(Angle);
var ly := y + l * Sin(Angle);
var angle1 := -Pi / 2 + Angle;
var rx := x + l * Cos(angle1);
var ry := y + l * Sin(angle1);
RLine(x, y, lx, ly);
RLine(x, y, rx, ry);
{condition}
if iterations > 0 then
begin
Dec(iterations);
l := l / 2;
Draw(lx, ly, l, iterations); {recursive call}
Draw(rx, ry, l, iterations); {recursive call}
end;
end;
begin
Lockdrawing();
Draw(300, 300, 200, 7);
Redraw();
end.
Формулы
правитьВращение точки
правитьУзнать координаты точки B, которая повернулась на угол Angle относительно точки A можно так:
B.X := A.X + R * Cos(Angle);
B.Y := A.Y + R * Sin(Angle);
, где класс точки:
type
TPoint = auto class
X, Y: real;
end;
Интерполяция между числами
правитьИнтерполяция между числами a, b - нахождение промежуточных между ними (включая a, b) значений. Пусть a = 0, b = 100, то интерполяция от a к b при проценте интерполяции 20% выдаст ответ 20. Но, при интерполяции от b к а результатом будем 80. Формула:
A + (B - A) * Percent
, где Percent - процент интерполяции.