stringtranslate.com

Кривая Леви С

В математике кривая Леви C — это самоподобная фрактальная кривая , которая была впервые описана и чьи свойства дифференцируемости были проанализированы Эрнесто Чезаро в 1906 году и Георгом Фабером в 1910 году, но теперь носит имя французского математика Поля Леви , который был первым, кто описал ее свойства самоподобия , а также предоставил геометрическую конструкцию, показывающую ее как представительную кривую в том же классе, что и кривая Коха . Это особый случай кривой удвоения периода, кривой де Рама .

L-системная конструкция

Первые восемь этапов построения кривой Леви С
Кривая Леви C (из L-системы, после первых 12 стадий)

Если используется система Линденмайера , то построение кривой C начинается с прямой линии. Равнобедренный треугольник с углами 45°, 90° и 45° строится с использованием этой линии в качестве гипотенузы . Затем исходная линия заменяется двумя другими сторонами этого треугольника.

На втором этапе две новые линии формируют основание для другого прямоугольного равнобедренного треугольника и заменяются двумя другими сторонами соответствующего треугольника. Таким образом, после двух этапов кривая приобретает вид трех сторон прямоугольника с той же длиной, что и исходная линия, но шириной в два раза меньше.

На каждом последующем этапе каждый отрезок прямой линии в кривой заменяется двумя другими сторонами прямоугольного равнобедренного треугольника, построенного на нем. После n этапов кривая состоит из 2 n отрезков прямой, каждый из которых меньше исходной линии в 2 n /2 раза .

Эту L-систему можно описать следующим образом:

где « F » означает «тянуть вперед», «+» означает «повернуть по часовой стрелке на 45°», а «−» означает «повернуть против часовой стрелки на 45°».

Фрактальная кривая , которая является пределом этого «бесконечного» процесса, — это кривая Леви С. Свое название она получила из-за сходства с богато украшенной версией буквы «С». Кривая напоминает более тонкие детали дерева Пифагора .

Размерность Хаусдорфа кривой C равна 2 (она содержит открытые множества), тогда как граница имеет размерность около 1,9340 [1].

Вариации

Стандартная кривая C строится с использованием равнобедренных треугольников с углом 45°. Вариации кривой C могут быть построены с использованием равнобедренных треугольников с углами, отличными от 45°. Пока угол меньше 60°, новые линии, вводимые на каждом этапе, короче линий, которые они заменяют, поэтому процесс построения стремится к предельной кривой. Углы меньше 45° создают фрактал, который менее плотно «закручен».

Строительство МФС

Кривая Леви C (из IFS, бесконечные уровни)

Если использовать итеративную систему функций (IFS, или, на самом деле, метод IFS игры хаоса ), то построение кривой C немного проще. Для этого понадобится набор из двух «правил», которые таковы: Две точки на плоскости ( трансляторы ), каждое из которых связано с масштабным коэффициентом 1/ 2 . Первое правило — это поворот на 45°, а второе — на −45°. Этот набор будет итерировать точку [ xy ] из случайного выбора любого из двух правил и использовать параметры, связанные с правилом, для масштабирования/поворота и переноса точки с использованием функции 2D- преобразования .

Подставим в формулы:

из начального набора точек .

Пример реализации кривой Levy C

// Пример реализации кривой Леви C на Javaимпорт java.awt.Color ; импорт java.awt.Graphics ; импорт java.awt.Graphics2D ; импорт javax.swing.JFrame ; импорт javax.swing.JPanel ; импорт java.util.concurrent.ThreadLocalRandom ;      открытый класс C_curve расширяет JPanel {      public float x , y , len , alpha_angle ; public int iteration_n ;         public void paint ( Graphics g ) { Graphics2D g2d = ( Graphics2D ) g ; c_curve ( x , y , len , alpha_angle , iteration_n , g2d ); }                 public void c_curve ( double x , double y , double len , double alpha_angle , int iteration_n , Graphics2D g ) { double fx = x ; double fy = y ; double length = len ; double alpha = alpha_angle ; int it_n = iteration_n ; if ( it_n > 0 ) { length = ( length / Math . sqrt ( 2 )); c_curve ( fx , fy , length , ( alpha + 45 ), ( it_n - 1 ), g ); // Рекурсивный вызов fx = ( fx + ( length * Math . cos ( Math . toRadians ( alpha + 45 )))); fy = ( fy + ( length * Math . sin ( Math . toRadians ( alpha + 45 )))); c_curve ( fx , fy , length , ( alpha - 45 ) , ( it_n - 1 ) , g ) ; // Рекурсивный вызов } else { Color [ ] A = { Color.RED , Color.ORANGE , Color.BLUE , Color.DARK_GRAY } ; g.setColor ( A [ ThreadLocalRandom.current ( ) ) . nextInt ( 0 , A                                                                                                 . length ) ] ); //Для выбора различных значений цвета g . drawLine (( int ) fx , ( int ) fy , ( int ) ( fx + ( length * Math . cos ( Math . toRadians ( alpha ))))), ( int ) ( fy + ( length * Math . sin ( Math . toRadians ( alpha ))))); } }                    public static void main ( String [] args ) { C_curve points = new C_curve (); points . x = 200 ; // Указание значения x points . y = 100 ; // Указание значения y points . len = 150 ; // Указание значения длины points . alpha_angle = 90 ; // Указание значения угла points . iteration_n = 15 ; // Указание значения итерации                               JFrame frame = new JFrame ( " Points " ) ; frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ) ; frame.add ( points ) ; frame.setSize ( 500 , 500 ) ; frame.setLocationRelativeTo ( null ) ; frame.setVisible ( true ) ;           } }

Смотрите также

Ссылки