Крива дракона — приклад системи ітераційних функцій, загальна назва для деяких фрактальних кривих, які можуть бути апроксимовані рекурсивними методами, такими як [en].
Дракон Хартера — Хейтуея
Дракон Хартера, також відомий як дракон Хартера — Хейтуея, був вперше досліджений фізиками NASA. Він був описаний в 1967 році Мартіном Гарднером в колонці «Математичні ігри» журналу «Scientific American». Багато властивостей фрактала були описані [en] і Дональдом Кнутом.
Фрактал може бути записаний як [en] з параметрами:
- кут дорівнює 90°
- початковий рядок FX
- правила перетворення рядків:
Це може бути описано так: Починаючи з базового сегмента, замінити кожен сегмент двома сегментами з прямим кутом і з обертанням на 45°, альтернативно, праворуч і ліворуч:
Крім того, фрактал може бути описаний системою ітераційних функцій на комплексній площині:
з початковим набором пунктів.
Використання натомість пар дійсних чисел ілюструють дві функції:
Це подання найчастіше використовується у програмах, таких як Apophysis.
Складання Дракона
При трасуванні ітерації кривої дракона від одного кінця до іншого, один стикається з низкою витків 90 градусів. Протягом перших декількох ітерацій послідовність праворуч (R) і ліворуч (L) виявляється таким чином:
- 1-а ітерація: R;
- 2-а ітерація: R R L;
- 3-а ітерація: R R L R R L L;
- 4-а ітерація: R R L R R L L R R R L L R L L.
Ця схема говорить про те, що кожна ітерація формується шляхом прийняття попередньої ітерації, додавання R в кінці, а потім ретроградного повороту з оригінальної ітерації, заміняти кожну букву і додавати результат після R.
Ця модель, у свою чергу, передбачає такий метод створення моделей ітерацій кривої дракона по складанню смужки паперу. Візьміть смужку паперу і складіть її навпіл з правого боку. Складіть її навпіл і знову праворуч. Якщо смуга була відкрита зараз, розгинайте кожну складку, щоб отримати 90-градусний поворот, послідовність черги буде RRL тобто другої ітерації дракона. Складіть смужку навпіл і знову праворуч, і наступна послідовність розкладеної смуги тепер RRLRRLL — третьої ітерації дракона. Продовжуючи складання смуги наполовину вправо, будуть створюватися додаткові ітерації дракона (на практиці, смуга стає занадто товстою, щоб різко скинути після чотирьох або п'яти ітерацій).
Ця модель також дає метод для визначення напрямку -го повороту послідовності дракона. По-перше, виразити у вигляді , де — це непарне число. Напрямок у свою чергу, визначається тобто залишок наліво, коли ділиться на 4. Якщо , то -й елемент у черзі є R; якщо , то -й елемент у черзі є L.
Наприклад, щоб визначити напрямок повороту 76376:
- 76376 = 9547*8
- 9547 = 2386x4 + 3
- так +9547
- так напрямок 76376 є L.
Існує простий однолінійной нерекурсивний метод реалізації наведеного вище методу знаходження напрямку повороту в коді. Обчислення повороту у вигляді двійкового числа, обчислюється наступним логічним значенням:
- bool turn = (((n & −n) << 1) & n) != 0;
- «n & −n» залишає тільки один біт, якщо '1', то вправо '1' в двійковому розкладанні n;
- «<< 1» зрушує вліво на одну позицію;
- «& n» виходить, що або один біт (якщо ), або нуль (якщо ).
- так «bool turn = (((n & −n) << 1) & n) != 0» — TRUE якщо n у свою чергу — L; і FALSE, якщо n у свою чергу — R.
Грей код
Інший спосіб обробки — зменшення за нижчезазначеним алгоритмом. Використання коду Грея, починаючи з нуля, визначає зміну до наступного значення. Якщо зміна 1, то повернути наліво, і якщо він дорівнює 0, то повернути праворуч. Враховуючи дискретний вхід, B, відповідний код Грея, G, дається «G = B XOR (B>>1)». Використання Gi та Gi−1, поворот дорівнює «(не Gi), а Gi−1».
- G = B ^ (B >> 1); Це стає сірий код з двійкового.
- Т = (~ G0) і G1; Якщо T дорівнює 0 — за годинниковою стрілкою, інше — повернути проти годинникової стрілки.
Розміри
- Незважаючи на дивний вигляд, крива дракона має прості вимірювання. Зверніть увагу, що розміри 1 та 1,5 є границею, а не фактичним значенням.
- Його поверхня також досить проста: якщо початковий відрізок дорівнює 1, то його поверхню дорівнює . Цей результат походить від його властивості.
- Крива ніколи не перетинає себе.
- Багато самостійно схожих елементів можна побачити на кривій дракона. Найбільш очевидним є повторення тієї ж схеми, нахиленої на 45 ° і з коефіцієнтом обтиснення .
- Його фрактальна розмірність може бути обчислена : : Ця [en].
- Його межа має нескінченну довжину, так як це збільшує аналогічний коефіцієнт кожної ітерації.
- Фрактальна розмірність його межі була наближена чисельно до розмірності Чанг і Чжан.
Насправді він може бути знайдений аналітично:
У цьому корінь рівняння
Черепиця
- 1-й елемент з 4 кривих
- 2-й елемент з 4 кривих
- 3-й елемент з 4 кривих
- Крива дракона
- 1-й елемент з 2 кривих
- 2-й елемент з 2 кривих (twindragon)
- 3-й елемент з 2 кривих
- Приклад площини плитки
- Приклад площини плитки
- Приклад площини плитки
- Крива дракона в зростаючих розмірах утворюють нескінченну спіраль. 4 з цих спіралей (з обертанням 90 °).
Twindragon
Twindragon (також відомий як дракон Девіс-Кнута) може бути побудований шляхом розміщення двох кривих дракона спина до спини. Ця система функцій може мати також безліч повторів:
де вихідна форма визначається наступним набором.
Це також можна записати у вигляді L-системи — достатньо лише додати ще один розділ в початковому рядку:
- кут 90 °;
- Початковий рядок FX + FX +;
- рядок переписування правил:
- Х ↦ X + YF
- У ↦ FX — У.
Terdragon
Terdragon може бути записаний у вигляді системи:
- кут 120 °;
- Початковий рядок F;
- рядок переписування правил:
- F ↦ F+F−F.
Ця система функцій може мати безліч повторів:
де :
Крива Леві
Приклад алгоритму на PHP
<?php $i = 20; $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); drawDragon($image, imagesx($image) * 3/8, imagesy($image) * 3/8, imagesx($image) * 5/8, imagesy($image) * 5/8, $i, $color); /** * Draws dragon curve between two points. * @return void */ function drawDragon($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; drawDragon($image, $xa, $ya, $xb, $yb, $i - 1, $color); drawDragon($image, $xc, $yc, $xb, $yb, $i - 1, $color); } } header('Content-type: image/png'); imagepng($image); imagedestroy($image);
Приклад алгоритму на Delphi (VCL)
procedure Dragon(x1,y1,x2,y2,Depth:Longint;canv:TCanvas); procedure Paint(x1,y1,x2,y2,k:Longint); var tx,ty:Longint; begin if k=0 then begin canv.MoveTo(x1,y1); canv.LineTo(x2,y2); Exit; end; tx:=(x1+x2) div 2+(y2-y1) div 2; ty:=(y1+y2) div 2-(x2-x1) div 2; Paint(x2,y2,tx,ty,k-1); Paint(x1,y1,tx,ty,k-1); end; begin Paint(x1,y1,x2,y2,Depth); end;
Приклад алгоритму на Python 3
from turtle import * def go_drakoning(t, length, depth, sign = 1): if depth == 1: t.forward(length) else: t.left(45*sign) go_drakoning(t, length/2**0.5, depth - 1, 1) t.right(90*sign) go_drakoning(t, length/2**0.5, depth - 1, -1) t.left(45*sign) t = Turtle() t.color("blue") go_drakoning(t, 100, 9)
Код програми у середовищі програмування Borland Delphi
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Button1: TButton; PaintBox1: TPaintBox; procedure Button1Click(Sender: TObject); procedure Paint(x1,y1,x2,y2,k:Longint); private { Private declarations } public n: integer { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Paint(x1,y1,x2,y2,k:Longint); var tx,ty:Longint; begin if n=1 then begin PaintBox1.Canvas.Pen.Color:=clRed; end else begin PaintBox1.Canvas.Pen.Color:=clRed; end; if k=0 then begin PaintBox1.Canvas.MoveTo(x1,y1); PaintBox1.Canvas.LineTo(x2,y2); Exit; end; tx := (x1+x2) div 2 + (y2-y1) div 2; ty := (y1+y2) div 2 - (x2-x1) div 2; Paint(x2,y2,tx,ty,k-1); Paint(x1,y1,tx,ty,k-1); end; procedure TForm1.Button1Click(Sender: TObject); Var x1,y1,x2,y2,k: Integer; begin PaintBox1.Width := 1000; PaintBox1.Height:= 650; PaintBox1.Canvas.Brush.Color := clWhite; PaintBox1.Canvas.Rectangle(0,0,PaintBox1.width,PaintBox1.height); x1 := 200; y1 := 200; x2 := 500; y2 := 500; k := 24; Paint(x1,y1,x2,y2,k); end; end.
Примітки
- . Архів оригіналу за 16 серпня 2019. Процитовано 9 квітня 2016.
- «The Boundary of Periodic Iterated Function Systems [ 7 квітня 2016 у Wayback Machine.]» by Jarek Duda, The Wolfram Demonstrations Project. Recurrent construction of the boundary of dragon curve.
- Bailey, Scott; Kim, Theodore; Strichartz, Robert S. (2002), Inside the Lévy dragon, The American Mathematical Monthly, 109 (8): 689—703, doi:10.2307/3072395.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Kriva drakona priklad sistemi iteracijnih funkcij zagalna nazva dlya deyakih fraktalnih krivih yaki mozhut buti aproksimovani rekursivnimi metodami takimi yak en Drakon Hartera HejtueyaKriva drakona Drakon Hartera takozh vidomij yak drakon Hartera Hejtueya buv vpershe doslidzhenij fizikami NASA Vin buv opisanij v 1967 roci Martinom Gardnerom v kolonci Matematichni igri zhurnalu Scientific American Bagato vlastivostej fraktala buli opisani en i Donaldom Knutom Fraktal mozhe buti zapisanij yak en z parametrami kut dorivnyuye 90 pochatkovij ryadok FXpravila peretvorennya ryadkiv X X YF displaystyle X rightarrow X YF Y FX Y displaystyle Y rightarrow FX Y Ce mozhe buti opisano tak Pochinayuchi z bazovogo segmenta zaminiti kozhen segment dvoma segmentami z pryamim kutom i z obertannyam na 45 alternativno pravoruch i livoruch The first 5 iterations and the 9th Krim togo fraktal mozhe buti opisanij sistemoyu iteracijnih funkcij na kompleksnij ploshini f1 z 1 i z2 displaystyle f 1 z frac 1 i z 2 f2 z 1 1 i z2 displaystyle f 2 z 1 frac 1 i z 2 z pochatkovim naborom S0 0 1 displaystyle S 0 0 1 punktiv Vikoristannya natomist par dijsnih chisel ilyustruyut dvi funkciyi f1 x y 12 cos 45 sin 45 sin 45 cos 45 xy displaystyle f 1 x y frac 1 sqrt 2 begin pmatrix cos 45 circ amp sin 45 circ sin 45 circ amp cos 45 circ end pmatrix begin pmatrix x y end pmatrix f2 x y 12 cos 135 sin 135 sin 135 cos 135 xy 10 displaystyle f 2 x y frac 1 sqrt 2 begin pmatrix cos 135 circ amp sin 135 circ sin 135 circ amp cos 135 circ end pmatrix begin pmatrix x y end pmatrix begin pmatrix 1 0 end pmatrix Ce podannya najchastishe vikoristovuyetsya u programah takih yak Apophysis Formu krivoyi legshe pobachiti yaksho okrugliti kuti Skladannya Drakona Pri trasuvanni iteraciyi krivoyi drakona vid odnogo kincya do inshogo odin stikayetsya z nizkoyu vitkiv 90 gradusiv Protyagom pershih dekilkoh iteracij poslidovnist pravoruch R i livoruch L viyavlyayetsya takim chinom 1 a iteraciya R 2 a iteraciya R R L 3 a iteraciya R R L R R L L 4 a iteraciya R R L R R L L R R R L L R L L Cya shema govorit pro te sho kozhna iteraciya formuyetsya shlyahom prijnyattya poperednoyi iteraciyi dodavannya R v kinci a potim retrogradnogo povorotu z originalnoyi iteraciyi zaminyati kozhnu bukvu i dodavati rezultat pislya R Cya model u svoyu chergu peredbachaye takij metod stvorennya modelej iteracij krivoyi drakona po skladannyu smuzhki paperu Vizmit smuzhku paperu i skladit yiyi navpil z pravogo boku Skladit yiyi navpil i znovu pravoruch Yaksho smuga bula vidkrita zaraz rozginajte kozhnu skladku shob otrimati 90 gradusnij povorot poslidovnist chergi bude RRL tobto drugoyi iteraciyi drakona Skladit smuzhku navpil i znovu pravoruch i nastupna poslidovnist rozkladenoyi smugi teper RRLRRLL tretoyi iteraciyi drakona Prodovzhuyuchi skladannya smugi napolovinu vpravo budut stvoryuvatisya dodatkovi iteraciyi drakona na praktici smuga staye zanadto tovstoyu shob rizko skinuti pislya chotiroh abo p yati iteracij Animaciya rozgortki krivoyi Drakona Cya model takozh daye metod dlya viznachennya napryamku n displaystyle n go povorotu poslidovnosti drakona Po pershe viraziti n displaystyle n u viglyadi k2m displaystyle k2 m de k displaystyle k ce neparne chislo Napryamok n displaystyle n u svoyu chergu viznachayetsya k mod4 displaystyle k pmod 4 tobto zalishok nalivo koli k displaystyle k dilitsya na 4 Yaksho k 1 mod4 displaystyle k equiv 1 pmod 4 to n displaystyle n j element u cherzi ye R yaksho k 3 mod4 displaystyle k equiv 3 pmod 4 to n displaystyle n j element u cherzi ye L Napriklad shob viznachiti napryamok povorotu 76376 76376 9547 8 9547 2386x4 3 tak 9547 3 mod4 displaystyle equiv 3 pmod 4 tak napryamok 76376 ye L Isnuye prostij odnolinijnoj nerekursivnij metod realizaciyi navedenogo vishe metodu znahodzhennya napryamku povorotu v kodi Obchislennya povorotu n displaystyle n u viglyadi dvijkovogo chisla obchislyuyetsya nastupnim logichnim znachennyam bool turn n amp n lt lt 1 amp n 0 n amp n zalishaye tilki odin bit yaksho 1 to vpravo 1 v dvijkovomu rozkladanni n lt lt 1 zrushuye vlivo na odnu poziciyu amp n vihodit sho abo odin bit yaksho k 3 mod4 displaystyle k equiv 3 pmod 4 abo nul yaksho k 1 mod4 displaystyle k equiv 1 pmod 4 tak bool turn n amp n lt lt 1 amp n 0 TRUE yaksho n u svoyu chergu L i FALSE yaksho n u svoyu chergu R Grej kod Inshij sposib obrobki zmenshennya za nizhchezaznachenim algoritmom Vikoristannya kodu Greya pochinayuchi z nulya viznachaye zminu do nastupnogo znachennya Yaksho zmina 1 to povernuti nalivo i yaksho vin dorivnyuye 0 to povernuti pravoruch Vrahovuyuchi diskretnij vhid B vidpovidnij kod Greya G dayetsya G B XOR B gt gt 1 Vikoristannya Gi ta Gi 1 povorot dorivnyuye ne Gi a Gi 1 G B B gt gt 1 Ce staye sirij kod z dvijkovogo T G0 i G1 Yaksho T dorivnyuye 0 za godinnikovoyu strilkoyu inshe povernuti proti godinnikovoyi strilki Rozmiri Nezvazhayuchi na divnij viglyad kriva drakona maye prosti vimiryuvannya Zvernit uvagu sho rozmiri 1 ta 1 5 ye graniceyu a ne faktichnim znachennyam Jogo poverhnya takozh dosit prosta yaksho pochatkovij vidrizok dorivnyuye 1 to jogo poverhnyu dorivnyuye 12 displaystyle frac 1 2 Cej rezultat pohodit vid jogo vlastivosti Kriva nikoli ne peretinaye sebe Bagato samostijno shozhih elementiv mozhna pobachiti na krivij drakona Najbilsh ochevidnim ye povtorennya tiyeyi zh shemi nahilenoyi na 45 i z koeficiyentom obtisnennya 2 displaystyle sqrt 2 Jogo fraktalna rozmirnist mozhe buti obchislena ln 2ln 2 2 displaystyle textstyle frac ln 2 ln sqrt 2 2 Cya en Jogo mezha maye neskinchennu dovzhinu tak yak ce zbilshuye analogichnij koeficiyent kozhnoyi iteraciyi Fraktalna rozmirnist jogo mezhi bula nablizhena chiselno do rozmirnosti Chang i Chzhan Naspravdi vin mozhe buti znajdenij analitichno log2 1 73 6873 73 68733 1 523627086202492 displaystyle log 2 left frac 1 sqrt 3 73 6 sqrt 87 sqrt 3 73 6 sqrt 87 3 right cong 1 523627086202492 U comu korin rivnyannya 4x 2x 1 4 2x 1 displaystyle textstyle 4 x 2 x 1 4 2 x 1 Cherepicya 1 j element z 4 krivih 2 j element z 4 krivih 3 j element z 4 krivih Kriva drakona 1 j element z 2 krivih 2 j element z 2 krivih twindragon 3 j element z 2 krivih Priklad ploshini plitki Priklad ploshini plitki Priklad ploshini plitki Kriva drakona v zrostayuchih rozmirah utvoryuyut neskinchennu spiral 4 z cih spiralej z obertannyam 90 Twindragon Twindragon takozh vidomij yak drakon Devis Knuta mozhe buti pobudovanij shlyahom rozmishennya dvoh krivih drakona spina do spini Cya sistema funkcij mozhe mati takozh bezlich povtoriv f1 z 1 i z2 displaystyle f 1 z frac 1 i z 2 f2 z 1 1 i z2 displaystyle f 2 z 1 frac 1 i z 2 de vihidna forma viznachayetsya nastupnim S0 0 1 1 i displaystyle S 0 0 1 1 i naborom Ce takozh mozhna zapisati u viglyadi L sistemi dostatno lishe dodati she odin rozdil v pochatkovomu ryadku kut 90 Pochatkovij ryadok FX FX ryadok perepisuvannya pravil H X YF U FX U Twindragon kriva Twindragon kriva pobudovana z dvoh krivih drakonaTerdragon Terdragon kriva Terdragon mozhe buti zapisanij u viglyadi sistemi kut 120 Pochatkovij ryadok F ryadok perepisuvannya pravil F F F F Cya sistema funkcij mozhe mati bezlich povtoriv f1 z lz displaystyle f 1 z lambda z f2 z i3z l displaystyle f 2 z frac i sqrt 3 z lambda f3 z lz l displaystyle f 3 z lambda z lambda de l 12 i23 l 12 i23 displaystyle lambda frac 1 2 frac i 2 sqrt 3 lambda frac 1 2 frac i 2 sqrt 3 Kriva LeviTakozh vidoma yak drakon Levi Drakon Levi Priklad algoritmu na PHP lt php i 20 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 drawDragon image imagesx image 3 8 imagesy image 3 8 imagesx image 5 8 imagesy image 5 8 i color Draws dragon curve between two points return void function drawDragon 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 drawDragon image xa ya xb yb i 1 color drawDragon image xc yc xb yb i 1 color header Content type image png imagepng image imagedestroy image Priklad algoritmu na Delphi VCL procedure Dragon x1 y1 x2 y2 Depth Longint canv TCanvas procedure Paint x1 y1 x2 y2 k Longint var tx ty Longint begin if k 0 then begin canv MoveTo x1 y1 canv LineTo x2 y2 Exit end tx x1 x2 div 2 y2 y1 div 2 ty y1 y2 div 2 x2 x1 div 2 Paint x2 y2 tx ty k 1 Paint x1 y1 tx ty k 1 end begin Paint x1 y1 x2 y2 Depth end Priklad algoritmu na Python 3 from turtle import def go drakoning t length depth sign 1 if depth 1 t forward length else t left 45 sign go drakoning t length 2 0 5 depth 1 1 t right 90 sign go drakoning t length 2 0 5 depth 1 1 t left 45 sign t Turtle t color blue go drakoning t 100 9 Kod programi u seredovishi programuvannya Borland Delphiunit Unit1 interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs ExtCtrls StdCtrls type TForm1 class TForm Button1 TButton PaintBox1 TPaintBox procedure Button1Click Sender TObject procedure Paint x1 y1 x2 y2 k Longint private Private declarations public n integer Public declarations end var Form1 TForm1 implementation R dfm procedure TForm1 Paint x1 y1 x2 y2 k Longint var tx ty Longint begin if n 1 then begin PaintBox1 Canvas Pen Color clRed end else begin PaintBox1 Canvas Pen Color clRed end if k 0 then begin PaintBox1 Canvas MoveTo x1 y1 PaintBox1 Canvas LineTo x2 y2 Exit end tx x1 x2 div 2 y2 y1 div 2 ty y1 y2 div 2 x2 x1 div 2 Paint x2 y2 tx ty k 1 Paint x1 y1 tx ty k 1 end procedure TForm1 Button1Click Sender TObject Var x1 y1 x2 y2 k Integer begin PaintBox1 Width 1000 PaintBox1 Height 650 PaintBox1 Canvas Brush Color clWhite PaintBox1 Canvas Rectangle 0 0 PaintBox1 width PaintBox1 height x1 200 y1 200 x2 500 y2 500 k 24 Paint x1 y1 x2 y2 k end end Primitki Arhiv originalu za 16 serpnya 2019 Procitovano 9 kvitnya 2016 The Boundary of Periodic Iterated Function Systems 7 kvitnya 2016 u Wayback Machine by Jarek Duda The Wolfram Demonstrations Project Recurrent construction of the boundary of dragon curve Bailey Scott Kim Theodore Strichartz Robert S 2002 Inside the Levy dragon The American Mathematical Monthly 109 8 689 703 doi 10 2307 3072395