Математика фракталов

Фрактал править

Фрактал может быть нарисован, например, так:

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 - процент интерполяции.