Кривая Леви — Википедия
Кривая Леви — фрактал. Предложен французским математиком П. Леви. Получается, если взять половину квадрата вида /\, а затем каждую сторону заменить таким же фрагментом, и, повторяя эту операцию, в пределе получим кривую Леви.
L-система, порождающая кривую Леви:
- переменные : F
- константы : + −
- начало : F
- правила : −F++F−
- угол : 45°
Свойства
[править | править код]- Кривая Леви нигде не дифференцируема и не спрямляема.
- На любом интервале кривой Леви есть точки самопересечения.
- Хаусдорфова размерность границы кривой Леви приблизительно равна 1,9340. (Кривая Леви состоит из двух равных частей, каждая из которых подобна всей кривой с коэффициентом подобия , из-за отсутствия существенных самопересечений её размерность в точности равна .)
- Кривая Леви — крона дерева Пифагора.
Вариации
[править | править код]Стандартная кривая Леви строится с помощью равнобедренных треугольников с углами при основании 45°. Вариации кривой Леви можно построить с помощью равнобедренных треугольников с другими, отличными от 45° углами. До тех пор, пока угол меньше 60°, каждая новая линия короче той линии, из которой она образована, так что процесс строительства стремится к предельной кривой. Углы менее 45° производят фрактал, который менее плотно «свёрнут».
Пример алгоритма на PHP
[править | править код]<?php $i = 10; $image = imagecreatetruecolor(640, 480); imagefilledrectangle($image, 0, 0, imagesx($image) - 1, imagesy($image) - 1, imagecolorresolve($image, 255, 255, 255)); $color = imagecolorresolve($image, 0, 0, 0); drawLevy($image, imagesx($image) * 3/8, imagesy($image) * 3/8, imagesx($image) * 5/8, imagesy($image) * 5/8, $i, $color); /** * Draws levy curve between two points. * @return void */ function drawLevy($image, $xa, $ya, $xc, $yc, $i, $color) { if($i == 0) imageline($image, $xa, $ya, $xc, $yc, $color); else { // A---B // | // C $xb = ($xa + $xc) / 2 + ($yc - $ya) / 2; $yb = ($ya + $yc) / 2 - ($xc - $xa) / 2; drawLevy($image, $xa, $ya, $xb, $yb, $i - 1, $color); drawLevy($image, $xb, $yb, $xc, $yc, $i - 1, $color); } } header('Content-type: image/png'); imagepng($image); imagedestroy($image); ?>
Пример алгоритма на Python 3
[править | править код]import turtle turtle.hideturtle() turtle.tracer(0) turtle.penup() turtle.setposition(-100, 0) turtle.pendown() axiom, tempAx, logic, iterations = 'F', '', {'F': '-F++F-'}, 15 for i in range(iterations): for j in axiom: tempAx += logic[j] if j in logic else j axiom, tempAx = tempAx, '' for k in axiom: if k == '+': turtle.right(45) elif k == '-': turtle.left(45) else: turtle.forward(1) turtle.update() turtle.mainloop()
См. также
[править | править код]В статье не хватает ссылок на источники (см. рекомендации по поиску). |