Artikel ini merupakan kelanjutan dari artikel pertama saya
, Fractals in Prime Numbers .
Artikel selanjutnya:
Fraktal dalam bilangan irasional. Bagian 2
Dalam artikel sebelumnya, kami belajar cara menggambar pola yang mirip diri sendiri dengan menggunakan bilangan prima yang saling menguntungkan. Pada artikel ini saya akan menunjukkan sifat fraktal dari angka tersebut
sqrt2 .
Tanpa kata pengantar. Di bawah kucing.
Kami akan mendefinisikan terminologi dan notasi. Dalam matematika, sistem yang dijelaskan di bawah ini disebut
biliar . Selanjutnya kita akan menggunakan istilah ini. Dimensi biliar persegi panjang akan dilambangkan dengan
M (lebar) dan
N (tinggi).
Biliar biner
Pada artikel sebelumnya, kami mengambil biliar persegi dengan sisi
M dan
N , meluncurkan bola ke dalamnya dan menandai lintasan dengan garis putus-putus melalui sel:

Untuk saling sederhana
M dan
N kita mendapatkan polanya:

Dalam versi biner, kami menandai lintasan tidak dengan garis putus-putus, tetapi secara bergantian mengecat sel dengan hitam dan putih (kami membentuk array biner, menempatkan 0 untuk hitam dan 1 untuk putih di sel yang sesuai):

Aturan Refleksi Perbatasan:

Untuk saling sederhana
M dan
N lintasan melewati setiap sel:

Untuk M dan N yang berbedaYang paling mengejutkan tentang pola-pola ini adalah berbeda
M dan
N ternyata polanya yang unik:





Dalam artikel tersebut, sebagai
M dan
N , kami terutama menggunakan angka Fibonacci.
Di sini Anda dapat menggambar pola untuk nomor lain (koordinat mouse).
Jika para pihak memiliki pembagi umum, maka bola memasuki sudut sebelum melewati setiap sel:

Lebih mudah untuk menganggap kasus ini sebagai biliar dalam persegi panjang dengan sisi
fracMGCD dan
fracNGCD (GCD adalah faktor umum terbesar):

Sebelum melanjutkan, isi tabel yang diusulkan oleh pengguna
Captain1312 dalam
artikelnya (kami akan membagi sisi biliar menjadi GCD).
(1,0) sedikit
Untuk setiap meja biliar
M dan
N ambil sedikit dengan koordinat
(1,0) .

Jika
M adalah pembagi
N - lalu sedikit dengan koordinat
(1,0) hilang (
fracMGCD=1 ) Dalam hal ini, kami mengambil bit terbalik dengan koordinat
(0,1) .
Isi tabel. Asalnya adalah sudut kiri atas. Oleh
x - lebar biliar
M oleh
y - tinggi
N . Untuk setiap biliar, kami menandai sedikit
(1,0) , atau bit terbalik
(0,1) (kami akan kembali ke topik ini di bawah).

Sedikit tentang angka FibonacciTabel menunjukkan garis yang muncul dari sudut kiri atas. Jika Anda membangun tabel seperti itu dengan koordinat
(3,0) - garis-garis ini dapat terlihat lebih baik:

Ada cara orisinal lain untuk mendapatkan garis-garis ini.
Untuk masing-masing
x dan
y jika
y adalah pembagi
x , buat urutan angka Fibonacci:
F0=y;F1=x;Fn=Fn−1+Fn−2
Dan tandai titik-titik pada grafik
(Fn,Fn−1) dan
(Fn−1,Fn) :

Urutan biner
Kenapa kami membalikkan bit ketika lebar biliar
M=1 ? Untuk saling sederhana
M dan
N , lintasan bola melewati masing-masing sel. Di antara dinding atas dan kiri biliar, bola setiap kali melewati jumlah sel yang genap.


Bit di kolom kiri adalah bit terbalik dari baris atas. Kami tidak mengambil bit nol - lintasan dimulai dengan itu:

Selain itu, kami dapat dengan aman membuang setiap bit kedua dari urutan ini (bit
2n−1 - bit terbalik
2n ):

Dapat urutannya
10100110110 untuk biliar
(21,13) . Urutannya unik untuk semua orang.
M dan
N .
Apa pun tingginya
N kami tidak mengambil - bola selalu berjalan di sepanjang lintasan
2N antara dua pantulan dari dinding atas. Dari dinding atas, gerakan selalu dimulai dengan bit “0” (sel hitam) dan berakhir dengan bit “1” (sel putih):

Bahkan, urutan (yang kami soroti di atas -
10100110110 ) menunjukkan di sisi mana bola terbang: 1 - jika bola terbang, tercermin dari dinding kanan dan 0 - jika bola terbang, tercermin dari dinding kiri. Dalam gambar, lintasan bola ditandai hitam jika bola bergerak ke kanan dan putih jika bergerak ke kiri:

Sangat menarikDengan bantuan biliar, Anda dapat membagi dua angka dalam sistem biner. Pada saat menyentuh dinding atas atau bawah, kami memperbaiki arah gerakan bola. Jika bola bergerak ke kanan, kami menulis 0. Jika ke kiri, kami menulis 1. Kami akan memperbaiki masing-masing
2n menyentuh bola.
Sentuhan pertama dari dinding bawah. Bola bergerak ke kanan. Diperbaiki 0
Sentuhan kedua adalah dinding atas. Bola bergerak ke kiri. Memperbaiki 1
Sentuhan keempat adalah dinding atas. Bola bergerak ke kanan. Diperbaiki 0
Sentuhan kedelapan ada di dinding atas. Bola bergerak ke kanan. Diperbaiki 0
Dll
Got: 0.1001111001111001111 ... adalah notasi biner untuk fraksi
frac1321 .

Urutan ini (
10100110110 ) berisi semua informasi yang diperlukan tentang pola. Dengan itu, kita dapat mengembalikan pola asli (dan bahkan melihat di luar batas bawah pola). Ambil bujur sangkar dengan sisi
M . Kami mengatur bit urutan kami di tempat-tempat di mana bola menabrak dinding atas (jarak antara sentuhan berdekatan bola adalah 2 sel).

Jika bit yang sesuai = 1 - kita mulai bergerak ke kiri, menandai lintasan melalui sel. Jika bit = 0 - pindah ke kanan.

Dalam hal ini, jangan lupa tentang bit nol:

Gif:

Kami mendapatkan pola aslinya (dan melihat sedikit melewati batas bawah):
Script untuk memvisualisasikan urutan biner
Kita dapat membangun urutan ini menggunakan sisa divisi.
Biliar satu dimensi
Pada sumbu numerik
X ambil dua poin:
0 dan
M .

Bergerak dari satu titik ke titik lainnya, ukur jaraknya
N :

Menandai intinya. Kami terus mengukur jarak dari titik ini, menjaga arah. Jika Anda telah mencapai titik tersebut
0 atau
M - ubah arah:

Seperti dapat dilihat pada gambar di atas, titik pertama menunjukkan tempat di mana bola menyentuh dinding bawah biliar. Poin ini tidak menarik bagi kita. Kami hanya akan memperbaiki poin
2kN untuk
k=0,1,2,... .
Bagaimana cara menandai poin-poin ini? Putar biliar kami pada porosnya
X . Tandai poinnya
0,M,2M,3M,... . Sekarang mencapai titik
M kita tidak mengubah arah gerakan, tetapi terus bergerak ke titik
2juta .

Kelipatan
M , bagi sumbu kami menjadi beberapa segmen. Kami menandai segmen-segmen ini dengan satu dan nol (berselang-seling). Pada segmen yang ditandai dengan nol, bola (dalam biliar persegi panjang) bergerak dari kiri ke kanan. Di segmen yang ditandai dengan unit - dari kanan ke kiri. Atau lebih sederhana: bola bergerak dari kiri ke kanan jika
Qk=0 untuk
Qk= lfloor frac2kNM rfloor( textrmmod2); quadk=0,1,2,...
(Perhatian khusus harus diberikan pada formula ini. Selanjutnya, kami akan kembali ke sana)Mudah untuk melihat bahwa titik di mana bola menyentuh dinding atas biliar adalah sisa dari divisi
2kN pada
M . Dalam hal ini, kami tidak bisa memperbaiki pergerakan bola ke arah yang berlawanan. Kami mengambil seluruh bagian dari divisi ini
2kN pada
M jika itu adil - kami mempertimbangkan sisa divisi
2kN pada
M . Membagi sisa yang dihasilkan oleh 2 (jarak antara titik kontak yang berdekatan adalah dua sel). Mendapat indeks elemen array, yang perlu kita isi dengan nol. Elemen yang tersisa diisi dengan unit (bola bergerak dari dinding kanan ke kiri).
Panjang Urutan =
fracM2 .
function sequence(m,n){ var md=m/2; var array=[]; for(var k=0;k<md;k++) array[k]=1; for(var k=0;k<md;k++) if(Math.floor(2*k*n/m)%2==0) array[((2*k*n)%m)/2]=0; return array; } console.log(sequence(55, 34).join(''));
Sekarang kita dapat membangun urutan biner untuk biliar dengan sisi mana saja
M dan
N (dengan angka alami).
Beberapa contoh:
144x89 (angka Fibonacci):
010100101101001011010110100101101001010010110100101101011010010110100101
169x70 (nomor Pell):
0101011010100101011010100101011010110101001010110101001010110101001010010101101010010
233x55 (angka Fibonacci aneh
Fn dan
Fn−3 ):
0100100110110110010011011011001001001101100100100110110010010011011011001001101101100
10010011011001001001101100100100
Meja lain yang menarikGrafik yang sangat menarik diperoleh jika Anda mengambil biliar dengan lebar
M dan membangun urutan untuk masing-masing
N dari
0 sebelumnya
M . Selanjutnya, susun urutan ini.
var array; for(var y=1;y<m;y++){ array=sequence(m,y); for(var x=0;x<array.length;x++){ if(array[x]==0) context.fillRect (x, y, 1, 1); } }
Beberapa contoh.
M = 610:

M = 611:

M = 612:

M = 613:

M = 614:
Selebihnya M Kami memiliki urutan. Bagaimana lagi Anda bisa memvisualisasikan urutan biner? Menggunakan
Turtle Graphics .
Grafis penyu
Buat garis. Selanjutnya, kami mengambil bit secara bergantian dari urutan kami. Jika bit = 1 - putar segmen relatif ke yang sebelumnya
60 circ (searah jarum jam). Jika bit = 0 - ubah segmen dengan
−60 circ . Awal segmen berikutnya adalah akhir dari segmen sebelumnya.

Ambil dua angka Fibonacci yang cukup besar:
F29=514229 dan
F28=317811 .
Dibangun urutan:
00101101001011010010100101101001011010110100101101001010010110100101 ... (257114 karakter plus bit nol).
Kami memvisualisasikan menggunakan grafis kura-kura. Ukuran segmen awal adalah 10 piksel (segmen awal di sudut kanan bawah):

Ukuran segmen awal adalah 5 piksel:

Ukuran segmen awal adalah 1 piksel:

Contoh selanjutnya adalah nomor Pell.
Pn= begincases0,n=0;1,n=12Pn−1+Pn−2,n>1 endcases
Ambil
P16=470832 dan
P15=$19502 .
Urutan:
001010010101101010010101101010010100101011010100101011010100001010110110 (235415 karakter ditambah nol bit).
Ukuran segmen awal adalah 1 piksel:

Contoh lain adalah angka Fibonacci aneh
Fn dan
Fn−3 .
Ambil
F28=317811 dan
F25=75025 .
Urutan:
00110110010010011111001001001001101101100100110110110010010011011011001001 ... (158905 ditambah sedikit nol).
Alih-alih sudut
60 circ dan
−60 circ kami akan menggunakan sudut
90 circ dan
−90 circ .
Ukuran segmen awal adalah 5 piksel:

Ukuran segmen awal adalah 0,4 piksel:

Kurva ini memiliki nama - "
Fibonacci word fraktal ". Dimensi Hausdorff untuk kurva ini diketahui:
D=3 frac log Phi log(1+ sqrt2)=1.6379; quad Phi= frac1+ sqrt52
Script untuk memvisualisasikan urutan biner menggunakan Turtle GraphicsMasalah
Mungkinkah menggambar pola untuk biliar, yang sisi-sisinya tidak dapat dibandingkan (salah satu sisinya adalah bilangan irasional)? Tugasnya tidak sepele. Mencoba memecahkan masalah ini, kami akan menghadapi sejumlah pertanyaan:
1. Jika para pihak tidak dapat dibandingkan - kami tidak dapat membuka biliar dengan sel dengan ukuran yang sama.
2. Jika kedua sisi tidak bisa dibandingkan - bola akan memantul tanpa henti dan tidak akan pernah menyentuh sudut.
3. Urutan dalam biliar diisi secara acak, tetapi secara acak.

Dua pertanyaan pertama, jelas, tidak punya solusi. Tetapi jika ada cara untuk mengisi urutan secara berurutan, maka kita bisa, bergerak di sepanjang urutan dari kiri ke kanan, mengembalikan pola dengan cara yang kita gunakan di atas. Dan dengan demikian untuk melihat bagaimana polanya terlihat di sudut kiri atas biliar, sisi-sisinya tidak dapat dibandingkan.
Ilmu hitam
Ambil biliar, yang sisi-sisinya sama dengan angka Fibonacci (dengan angka lain, trik semacam itu mungkin tidak berfungsi). Jalankan bola ke dalamnya dan perbaiki jumlah bola yang menyentuh dinding atas. Isi angka dengan putih - jika bola bergerak dari kanan ke kiri dan hitam - jika bola bergerak dari kiri ke kanan:

Warna putih sesuai dengan satu dalam urutan, hitam - nol. Sekarang mari kita mengatur angka-angkanya:

Kami mendapat urutan yang sama dari nol dan nol.
Untuk nomor lainnyaAsalnya adalah sudut kiri atas. Sepanjang sumbu
x - lebar biliar
M . Sepanjang sumbu
y - Tinggi biliar
N . Titik putih menunjukkan angka yang urutannya sesuai:

Nomor yang urutannya dibalik:

Saya mengunggah
skrip :

Baris pertama adalah koordinat mouse, yang digunakan sebagai lebar dan tinggi biliar.
Baris kedua adalah 100 bit pertama dari urutan yang diperoleh melalui sisa divisi.
Baris ketiga adalah 100 bit pertama dari urutan yang diperoleh melalui paritas bagian integer.
Warna Hitam - Memberikan urutan pertama menggunakan grafis Turtle.
Violet - visualisasi urutan kedua.
Bahkan, dalam beberapa kasus, kita tidak perlu mengambil sisa divisi. Untuk bilangan Fibonacci, cukup untuk memeriksa paritas bagian integer dari divisi
2kN pada
M :
Qk= lfloor frac2kNM rfloor( textrmmod2); quadk=0,1,2,...
Dalam pembilang yang kita miliki
Fn . Dalam penyebut -
Fn+1 .
Seperti yang Anda ketahui:
limn to infty fracFnFn+1= frac1 Phi
Phi - Rasio emas. Bilangan irasional. Sekarang kita dapat menulis rumus kita sebagai:
Qk= lfloor frac2k Phi rfloor( textrmmod2); quadk=0,1,2,...
Kami mendapat formula untuk mengisi urutan biliar, yang lebarnya sama dengan
Phi dan tinggi
1 . Panjang Urutan =
infty , tetapi kita dapat mengembalikan bagian dari pola, bergerak dari kiri ke kanan secara berurutan dan melihat ke sudut kiri atas biliar. Masih mencari cara menghitung
PhiUnit dibagi dengan rasio emas dapat ditulis ulang sebagai:
frac1 Phi= frac−1+ sqrt52
Kita dapat menyingkirkan dua:
frac2k Phi= frac2k(−1+ sqrt5)2=k sqrt5−k
Formula kami berbentuk:
Qk= lfloork sqrt5−k rfloor( textrmmod2); quadk=0,1,2,...
Untuk lebih jelasnya, saya menggambar sebuah meja. Di kolom ketiga, kami membuang bagian fraksional dan meninggalkan keseluruhan. Di kolom keempat, kami memeriksa paritas bagian integer:

Di kolom keempat kami mendapat urutan kami: 01010010110100 ...
Kami terus menghitung bit untuk sisanya
k . Memulihkan bagian dari pola biliar dengan sisi
1 dan
Phi :

Jika Anda tidak mengambil setiap waktu
k - maka setiap bit kedua dalam urutan terbalik. Kami mendapatkan formula umum:
Qk= lfloork sqrtx rfloor( textrmmod2); quadk=0,1,2,...
Apa yang mencegah kita menggunakan akar kuadrat dari tiga atau, katakanlah, dua bukan akar kuadrat dari lima? Tidak ada
Kami membuat urutan untuk
k sqrt3+k var x=3; var q=[]; for(var k=0;k<256000;k++) q[k]=Math.floor(k*Math.sqrt(x)+k)%2;
Beberapa bit pertama dari urutan:
00100101101001001011010010110110100101101001001011010010010110100101 ...
Kami akan memvisualisasikan menggunakan grafis penyu. Sudut 90 dan -90 derajat. Ukuran segmen awal adalah 5 piksel:

Ukuran segmen awal adalah 0,5 piksel:

Kami membuat urutan untuk
k sqrt2 var x=2; var q=[]; for(var k=0;k<256000;k++) q[k]=Math.floor(k*Math.sqrt(x))%2;
Beberapa bit pertama dari urutan (
A083035 ):
01001101100100110010011011001101100100110110011011001001100100110110 ...
Sudut 90 dan -90 derajat. Ukuran segmen awal adalah 5 piksel:

Ukuran segmen awal adalah 0,5 piksel:

Sangat menarikDari kurva ini, Anda dapat memulihkan "pola biliar" dan melihat apa yang ada di sekitar kurva:

Akan menarik untuk mengambil
M dan
N untuk pola ini.
Dan iniJumlah segmen di bagian berulang dari kurva =
Pn (Nomor pell: 0, 1, 2, 5, 12, 29, 70, 169, 408, 985, 2378, ...).

sqrt2= limn to infty tfracPn−1+PnPn
Sudut 60 dan -60 derajat. Ukuran segmen awal adalah 5 piksel:
Script visualisasiSeseorang mungkin meragukan bahwa paritas bagian bilangan bulat
k sqrt2 memberikan urutan fraktal. Kami memvisualisasikan bagian dari urutan ini dengan cara kedua:

Untuk lebih jelasnya, saya melukis di atas kurva terpanjang dalam pola yang dihasilkan:

Kurva ini memiliki nama - "Fibonacci word fraktal".
Bagaimana cara mendapatkan urutan ini menggunakan biliar? Kami mengambil biliar, yang lebarnya = 1, dan tinggi =
sqrt2 . Di batas atas dan bawah, kami memperbaiki arah gerakan bola. Jika bola bergerak dari kiri ke kanan - tulis 0, jika dari kanan ke kiri - tulis 1.

Dua grafik:
z= lfloory sqrtx rfloor( textrmmod2)

z= lflooryx sqrt2 rfloor( textrmmod2)

Anda dapat melanjutkan dalam nada ini untuk waktu yang sangat lama - pola memiliki banyak sifat menarik. Tetapi artikel itu sudah terlalu rumit. Saya akan menceritakan tentang salah satu properti menarik pada akhirnya.
Saat melihat gambar, beberapa pengguna mungkin mengalami serangan epilepsi.Dalam biliar biner, kami memulai bola dari sudut kiri atas dan mengisi matriks dengan bit.
Untuk biliar 610x377:

Bagian pola yang diperbesar:

Jika Anda memulai bola kedua dari sudut yang berbeda (dari kiri bawah untuk biliar 610x377) dan menandai bit yang bertepatan untuk kedua lintasan - kami mendapatkan pola yang sangat menarik:

Bit yang cocok ditandai dengan piksel hitam. Bagian pola yang diperbesar:

Ada dua cara lagi untuk menggambar pola ini. Salah satunya disebutkan dalam artikel
Perfect shuffle . Kedua:
Mari kita menggambar grafik fungsi:
z= sin(x pi( sqrt5+1))+ sin(y pi( sqrt5+1))
Dan tandai dengan titik-titik hitam
z<0 :

Bagian pola yang diperbesar:
