![]() |
Матрица статей Список статей Всячина Контакты | ||||||||||||
|
Кривая дракона Проделаем следующее: сложим полоску бумаги поперёк вдвое. Повторим это пару раз. После развертывания получим полоску, состоящую из восьми кусков. Посмотрев на эту полоску в профиль, мы увидим ломаную линию. Этот эксперимент можно продолжать и дальше, но не очень долго, из-за конечной толщины бумаги.
Предположим, что угол в каждом сгибе один и тот же. Обозначим этот угол через Следуя этому правилу, мы можем нарисовать ломанную линию, которая получается в результате сгибания полоски бумаги любое число раз.
На рисунке ниже приведена ломаная с
А если положить
Можно также немного закруглять углы.
program Dragon; uses Graph, Crt; const c = 1024*16; d = 3; da =pi/2; var i : Integer; gd, gm : Integer; a, x, y : Real; procedure Lineto1(x, y, l, u : Real); begin Line(Round(x), Round(y), Round(x + l*cos(u)), Round(y - l*sin(u))); end; function Opra(n : Integer) : Integer; label nach; var j : Integer; begin j := n; nach: if (j - 1) mod 4 = 0 then Opra := -1 else if (j-3) mod 4 = 0 then Opra := 1 else begin j:=j div 2; goto nach; end; end; begin gd := Detect; InitGraph(gd,gm,'e:\bp\bgi'); x := 150; y := 150; a := pi/2; for i := 1 to c + 1 do begin Lineto1(x,y,d,a); x := x + d*cos(a); y := y - d*sin(a); a := a - da*Opra(i); end; ReadKey; CloseGraph; end.
Рассмотрим ещё один способ генерации
последовательности Для построения дракона Хартера-Хейтуэя с помощью IFS, используются следущие преобразования:
Dragon_2 {
0.5 -0.5 0.5 0.5 0 0 0.5
-0.5 -0.5 0.5 -0.5 1.5 -0.5 0.5
}
Если два одинаковых дракона Хартера-Хейтуэя состыковать так, чтобы
один был повернут относительно другого на
Dragon_3 {
0.5 -0.5 0.5 0.5 0 0 0.5
-0.5 0.5 -0.5 -0.5 1.5 0.5 0.5
}
Смотрите также: Ссылки:
|