Dieser Artikel ist eine Fortsetzung meines ersten Artikels
, Fraktale in Primzahlen .
Nächster Artikel:
Fraktale in irrationalen Zahlen. Teil 2
In einem früheren Artikel haben wir gelernt, wie man selbstähnliche Muster unter Verwendung von Primzahlen zeichnet. In diesem Artikel werde ich die fraktale Natur der Zahl zeigen
sqrt2 .
Ohne Vorwort. Unter Katze.
Wir werden Terminologie und Notation definieren. In der Mathematik werden die nachfolgend beschriebenen Systeme als
Billard bezeichnet . Weiter werden wir diesen Begriff verwenden. Die Abmessungen des rechteckigen Billards werden mit bezeichnet
M (Breite) und
N (Höhe).
Binäres Billard
Im vorherigen Artikel haben wir ein rechteckiges Billard mit Seiten genommen
M und
N , warf einen Ball hinein und markierte die Flugbahn mit einer gestrichelten Linie durch die Zelle:

Für beide einfach
M und
N wir bekommen das Muster:

In der Binärversion markieren wir die Flugbahn nicht mit einer gestrichelten Linie, sondern malen die Zellen abwechselnd mit Schwarzweiß (wir bilden ein Binärarray, setzen 0 für Schwarz und 1 für Weiß in die entsprechende Zelle):

Grenzreflexionsregeln:

Für beide einfach
M und
N Die Flugbahn verläuft durch jede Zelle:

Für verschiedene M und N.Was an diesen Mustern am meisten überrascht, ist das für verschiedene
M und
N es stellt sich sein eigenes einzigartiges Muster heraus:





In dem Artikel als
M und
N verwenden wir hauptsächlich Fibonacci-Zahlen.
Hier können Sie Muster für andere Zahlen (Mauskoordinaten) zeichnen.
Wenn die Parteien einen gemeinsamen Teiler haben, betritt der Ball die Ecke, bevor er durch jede Zelle geht:

Es ist zweckmäßig, diesen Fall als Billard in einem Rechteck mit Seiten zu betrachten
fracMGCD und
fracNGCD (GCD ist der größte gemeinsame Faktor):

Bevor Sie fortfahren, füllen Sie die Tabelle aus, die der Benutzer
Captain1312 in seinem
Artikel vorgeschlagen hat (wir werden die Seiten des Billards in GCD unterteilen).
(1,0) ein bisschen
Für jeden Billardtisch
M und
N nimm ein bisschen mit Koordinaten
(1,0) .

Wenn
M ist ein Teiler
N - dann ein bisschen mit Koordinaten
(1,0) fehlt (
fracMGCD=1 ) In diesem Fall nehmen wir das invertierte Bit mit den Koordinaten
(0,1) .
Füllen Sie die Tabelle aus. Der Ursprung ist die obere linke Ecke. Von
x - Breite des Billards
M von
y - Höhe
N . Für jedes Billard markieren wir ein bisschen
(1,0) oder invertiertes Bit
(0,1) (Wir werden unten auf dieses Thema zurückkommen).

Ein bisschen über Fibonacci-ZahlenDie Tabelle zeigt die Linien, die aus der oberen linken Ecke hervorgehen. Wenn Sie eine solche Tabelle für ein bisschen mit Koordinaten erstellen
(3,0) - Diese Linien sind noch besser zu sehen:

Es gibt einen anderen originellen Weg, um diese Zeilen zu erhalten.
Für jeden
x und
y wenn
y ist ein Teiler
x konstruiere eine Folge von Fibonacci-Zahlen:
F0=y;F1=x;Fn=Fn−1+Fn−2
Und markieren Sie die Punkte in der Grafik
(Fn,Fn−1) und
(Fn−1,Fn) ::

Binäre Sequenz
Warum haben wir das Bit umgedreht, als die Breite des Billards
M=1 ? Für beide einfach
M und
N Die Flugbahn des Balls verläuft durch jede Zelle. Zwischen der oberen und linken Wand des Billards passiert der Ball jedes Mal eine gerade Anzahl von Zellen.


Die Bits in der linken Spalte sind die invertierten Bits aus der oberen Zeile. Wir nehmen nicht das Nullbit - die Flugbahn beginnt damit:

Außerdem können wir sicher jedes zweite Bit aus dieser Sequenz (Bit) werfen
2n−1 - invertiertes Bit
2n ):

Habe die Sequenz
10100110110 für Billard
(21,13) . Die Sequenz ist für jeden einzigartig.
M und
N .
Egal wie hoch
N wir haben nicht genommen - der Ball geht immer entlang der Flugbahn
2N zwischen zwei Reflexionen von der oberen Wand. Von der oberen Wand aus beginnt die Bewegung immer mit einem „0“ -Bit (schwarze Zelle) und endet mit einem „1“ -Bit (weiße Zelle):

In der Tat die Sequenz (die wir oben hervorgehoben haben -
10100110110 ) zeigt an, auf welcher Seite der Ball eingeflogen ist: 1 - wenn der Ball eingeflogen ist, reflektiert von der rechten Wand und 0 - wenn der Ball eingeflogen ist, reflektiert von der linken Wand. Auf dem Bild ist die Flugbahn des Balls schwarz markiert, wenn sich der Ball nach rechts bewegt, und weiß, wenn er sich nach links bewegt:

Das ist interessantMit Hilfe von Billard können Sie zwei Zahlen im Binärsystem teilen. Im Moment des Berührens der oberen oder unteren Wand legen wir die Bewegungsrichtung des Balls fest. Wenn sich der Ball nach rechts bewegt, schreiben wir 0. Wenn nach links, schreiben wir 1. Wir werden jeden korrigieren
2n den Ball berühren.
Erste Berührung der Bodenwand. Der Ball bewegte sich nach rechts. Feste 0
Die zweite Berührung ist die obere Wand. Der Ball bewegte sich nach links. Behoben 1
Die vierte Berührung ist die obere Wand. Der Ball bewegte sich nach rechts. Feste 0
Die achte Berührung ist an der oberen Wand. Der Ball bewegte sich nach rechts. Feste 0
Usw.
Got: 0.1001111001111001111 ... ist eine binäre Notation für den Bruch
frac1321 .

Diese Sequenz (
10100110110 ) enthält alle notwendigen Informationen zum Muster. Damit können wir das ursprüngliche Muster wiederherstellen (und sogar über den unteren Rand des Musters hinausblicken). Nimm ein Quadrat mit Seiten
M . Wir ordnen die Teile unserer Sequenz an den Stellen an, an denen der Ball die obere Wand berührt (der Abstand zwischen den benachbarten Berührungen des Balls beträgt 2 Zellen).

Wenn das entsprechende Bit = 1 ist, bewegen wir uns nach links und markieren die Flugbahn durch die Zelle. Wenn Bit = 0 - nach rechts bewegen.

Vergessen Sie in diesem Fall nicht das Nullbit:

Gif:

Wir haben das ursprüngliche Muster erhalten (und etwas über den unteren Rand hinausgeschaut):
Skript zur Visualisierung von Binärsequenzen
Wir können diese Sequenz mit dem Rest der Division erstellen.
Eindimensionales Billard
Auf der numerischen Achse
X nimm zwei Punkte:
0 und
M .

Wenn Sie sich von einem Punkt zum anderen bewegen, messen Sie die Entfernung
N ::

Markierte den Punkt. Wir messen weiterhin den Abstand von diesem Punkt und halten dabei die Richtung ein. Wenn Sie den Punkt erreicht haben
0 oder
M - Richtung ändern:

Wie in den obigen Abbildungen zu sehen ist, zeigt der erste Punkt die Stelle, an der der Ball die Bodenwand des Billards berührt. Dieser Punkt interessiert uns nicht. Wir werden nur Punkte fixieren
2kN für
k=0,1,2,... .
Wie markiere ich diese Punkte? Drehen Sie unser Billard um die Achse
X . Markieren Sie die Punkte
0,M,2M,3M,... . Jetzt den Punkt erreichen
M Wir ändern nicht die Bewegungsrichtung, sondern bewegen uns weiter zum Punkt
2M .

Vielfache
M Teilen Sie unsere Achse in Segmente. Wir markieren diese Segmente bedingt mit Einsen und Nullen (abwechselnd). Bei mit Nullen markierten Segmenten bewegt sich die Kugel (in einem rechteckigen Billard) von links nach rechts. Auf den mit Einheiten gekennzeichneten Segmenten - von rechts nach links. Oder einfacher: Der Ball bewegt sich von links nach rechts, wenn
Qk=0 für
Qk= lfloor frac2kNM rfloor( textrmmod2); quadk=0,1,2,...
(Besondere Aufmerksamkeit sollte dieser Formel gewidmet werden. Als nächstes werden wir darauf zurückkommen.)Es ist leicht zu erkennen, dass der Punkt, an dem der Ball die obere Wand des Billards berührte, der Rest der Division ist
2kN auf
M . In diesem Fall können wir die Bewegung des Balls nicht in die entgegengesetzte Richtung fixieren. Wir übernehmen den gesamten Teil der Division
2kN auf
M Wenn es gerade ist, betrachten wir den Rest der Teilung
2kN auf
M . Teilen Sie den resultierenden Rest durch 2 (der Abstand zwischen benachbarten Kontaktpunkten beträgt zwei Zellen). Erhielt die Indizes der Elemente des Arrays, die wir mit Nullen füllen müssen. Die restlichen Elemente sind mit Einheiten gefüllt (der Ball bewegt sich von der rechten Wand nach links).
Sequenzlänge =
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(''));
Jetzt können wir eine binäre Sequenz für Billard mit beliebigen Seiten erstellen
M und
N (durch natürliche Zahlen).
Einige Beispiele:
144 x 89 (Fibonacci-Zahlen):
010100101101001011010110100101101001010010110100101101011010010110100101
169 x 70 (Pell-Nummern):
0101011010100101011010100101011010110101001010110101001010110101001010010101101010010
233x55 (ungerade Fibonacci-Zahlen
Fn und
Fn−3 ):
0100100110110110010011011011001001001101100100100110110010010011011011001001101101100
10010011011001001001101100100100
Ein weiterer interessanter TischSehr interessante Grafiken erhalten Sie, wenn Sie Billard mit einer Breite nehmen
M und bauen Sequenzen für jeden
N von
0 vorher
M . Als nächstes stapeln Sie diese Sequenzen.
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); } }
Einige Beispiele.
M = 610:

M = 611:

M = 612:

M = 613:

M = 614:
Für den Rest M. Wir haben Sequenzen. Wie sonst können Sie Binärsequenzen visualisieren? Verwenden von
Turtle-Grafiken .
Schildkrötengrafiken
Zeichne eine Linie. Als nächstes nehmen wir abwechselnd die Bits aus unserer Sequenz. Wenn bit = 1 - drehen Sie das Segment relativ zum vorherigen
60 circ (im Uhrzeigersinn). Wenn bit = 0 - drehen Sie das Segment um
−60 circ . Der Anfang des nächsten Segments ist das Ende des vorherigen.

Nehmen Sie zwei ausreichend große Fibonacci-Zahlen:
F29=514229 und
F28=317811 .
Erstellte die Sequenz:
00101101001011010010100101101001011010110100101101001010010110100101 ... (257114 Zeichen plus Nullbit).
Wir visualisieren mit Schildkrötengrafiken. Die Größe des Anfangssegments beträgt 10 Pixel (das Anfangssegment in der unteren rechten Ecke):

Die Größe des Anfangssegments beträgt 5 Pixel:

Die Größe des Anfangssegments beträgt 1 Pixel:

Das nächste Beispiel sind Pell-Zahlen.
Pn= beginFälle0,n=0;1,n=12Pn−1+Pn−2,n>1 endFälle
Nimm
P16=470832 und
P15=195025 .
Sequenz:
0010100101011010100101011010100101001010110101001010110101000010101101 (235415 Zeichen plus Nullbit).
Die Größe des Anfangssegments beträgt 1 Pixel:

Ein anderes Beispiel sind ungerade Fibonacci-Zahlen
Fn und
Fn−3 .
Nimm
F28=317811 und
F25=75025 .
Sequenz:
00110110010010011111001001001001101101100100110110110010010011011011001001 ... (158905 plus Nullbit).
Anstelle von Ecken
60 circ und
−60 circ Wir werden die Ecken benutzen
90 circ und
−90 circ .
Die Größe des Anfangssegments beträgt 5 Pixel:

Die Größe des Anfangssegments beträgt 0,4 Pixel:

Diese Kurve hat einen Namen - "
Fibonacci Wort Fraktal ". Die Hausdorff-Dimension für diese Kurve ist bekannt:
D=3 frac log Phi log(1+ sqrt2)=1,6379; quad Phi= frac1+ sqrt52
Skript zur Visualisierung von Binärsequenzen mit Turtle GraphicsDas Problem
Ist es möglich, ein Muster für Billard zu zeichnen, dessen Seiten nicht vergleichbar sind (eine der Seiten ist eine irrationale Zahl)? Die Aufgabe ist nicht trivial. Bei dem Versuch, dieses Problem zu lösen, werden wir vor einer Reihe von Fragen stehen:
1. Wenn die Parteien nicht miteinander vereinbar sind, können wir das Billard nicht mit Zellen gleicher Größe pflastern.
2. Wenn die Seiten nicht vergleichbar sind, wird der Ball unendlich reflektiert und trifft niemals die Ecke.
3. Sequenzen in Billard werden nicht in der richtigen Reihenfolge, sondern zufällig gefüllt.

Die ersten beiden Fragen haben offensichtlich keine Lösung. Wenn es jedoch eine Möglichkeit gäbe, die Sequenz in der richtigen Reihenfolge zu füllen, könnten wir das Muster auf die oben verwendete Weise wiederherstellen, indem wir uns in der Sequenz von links nach rechts bewegen. Und damit zu sehen, wie das Muster in der oberen linken Ecke des Billard aussieht, dessen Seiten nicht vergleichbar sind.
Schwarze Magie
Nehmen Sie Billard, dessen Seiten den Fibonacci-Zahlen entsprechen (bei anderen Zahlen funktioniert ein solcher Trick möglicherweise nicht). Führen Sie den Ball hinein und fixieren Sie die Nummer des Balls, der die obere Wand berührt. Malen Sie die Zahlen mit weißer Farbe - wenn sich der Ball von rechts nach links und schwarz bewegte - wenn sich der Ball von links nach rechts bewegte:

Die weiße Farbe entspricht eins in der Sequenz, schwarz - null. Ordnen wir nun die Zahlen der Reihe nach an:

Wir haben genau die gleiche Folge von Einsen und Nullen.
Für andere NummernDer Ursprung ist die obere linke Ecke. Entlang der Achse
x - Breite des Billards
M . Entlang der Achse
y - Billardhöhe
N . Weiße Punkte zeigen Zahlen an, für die die Sequenzen übereinstimmen:

Zahlen, für die die Sequenz invertiert ist:

Ich habe das
Skript hochgeladen:

Die erste Zeile sind die Koordinaten der Maus, die als Breite und Höhe des Billards verwendet werden.
Die zweite Zeile sind die ersten 100 Bits der Sequenz, die durch den Rest der Division erhalten werden.
Die dritte Zeile sind die ersten 100 Bits der Sequenz, die durch die Parität des ganzzahligen Teils erhalten werden.
Schwarze Farbe - Rendern Sie die erste Sequenz mithilfe von Turtle-Grafiken.
Violett - Visualisierung der zweiten Sequenz.
In einigen Fällen müssen wir den Rest der Division nicht übernehmen. Für Fibonacci-Zahlen reicht es aus, die Parität des ganzzahligen Teils der Division zu überprüfen
2kN auf
M ::
Qk= lfloor frac2kNM rfloor( textrmmod2); quadk=0,1,2,...
Im Zähler haben wir
Fn . Im Nenner -
Fn+1 .
Wie bekannt:
limn to infty fracFnFn+1= frac1 Phi
Phi - Der goldene Schnitt. Irrationale Zahl. Jetzt können wir unsere Formel schreiben als:
Qk= lfloor frac2k Phi rfloor( textrmmod2); quadk=0,1,2,...
Wir haben eine Formel, mit der wir die Reihenfolge für Billard füllen können, deren Breite gleich ist
Phi und Höhe
1 . Sequenzlänge =
infty Aber wir können einen Teil des Musters wiederherstellen, indem wir uns nacheinander von links nach rechts bewegen und in die obere linke Ecke des Billards schauen. Es bleibt abzuwarten, wie man zählt
PhiDie durch den goldenen Schnitt geteilte Einheit kann wie folgt umgeschrieben werden:
frac1 Phi= frac−1+ sqrt52
Wir können zwei loswerden:
frac2k Phi= frac2k(−1+ sqrt5)2=k sqrt5−k
Unsere Formel hat die Form:
Qk= lfloork sqrt5−k rfloor( textrmmod2); quadk=0,1,2,...
Aus Gründen der Klarheit habe ich einen Tisch gezeichnet. In der dritten Spalte verwerfen wir den Bruchteil und verlassen das Ganze. In der vierten Spalte überprüfen wir die Parität des ganzzahligen Teils:

In der vierten Spalte haben wir unsere Sequenz bekommen: 01010010110100 ...
Wir berechnen weiterhin die Bits für den Rest
k . Restaurierung eines Teils des Billardmusters mit Seiten
1 und
Phi ::

Wenn Sie nicht jedes Mal mitnehmen
k - dann wird jedes zweite Bit in der Sequenz invertiert. Wir erhalten die allgemeine Formel:
Qk= lfloork sqrtx rfloor( textrmmod2); quadk=0,1,2,...
Was hindert uns daran, die Quadratwurzel von drei oder beispielsweise von zwei anstelle der Quadratwurzel von fünf zu verwenden? Nichts.
Wir konstruieren eine Sequenz für
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;
Die ersten Bits der Sequenz:
00100101101001001011010010110110100101101001001011010010010110100101 ...
Wir werden mit Schildkrötengrafiken visualisieren. Winkel von 90 und -90 Grad. Die anfängliche Segmentgröße beträgt 5 Pixel:

Die Größe des Anfangssegments beträgt 0,5 Pixel:

Wir konstruieren eine Sequenz für
k sqrt2 var x=2; var q=[]; for(var k=0;k<256000;k++) q[k]=Math.floor(k*Math.sqrt(x))%2;
Die ersten Bits der Sequenz (
A083035 ):
01001101100100110010011011001101100100110110011011001001100100110110 ...
Winkel von 90 und -90 Grad. Die anfängliche Segmentgröße beträgt 5 Pixel:

Die Größe des Anfangssegments beträgt 0,5 Pixel:

Das ist interessantAnhand dieser Kurve können Sie das „Billardmuster“ wiederherstellen und sehen, was sich um die Kurve herum befindet:

Es wäre interessant aufzuheben
M und
N für dieses Muster.
Und dasDie Anzahl der Segmente im sich wiederholenden Teil der Kurve =
Pn (Pell-Nummern: 0, 1, 2, 5, 12, 29, 70, 169, 408, 985, 2378, ...).

sqrt2= limn to infty tfracPn−1+PnPn
Winkel von 60 und -60 Grad. Die anfängliche Segmentgröße beträgt 5 Pixel:
VisualisierungsskriptJemand kann bezweifeln, dass die Parität des ganzzahligen Teils von
k sqrt2 gibt eine fraktale Sequenz. Wir visualisieren einen Teil dieser Sequenz auf die zweite Weise:

Aus Gründen der Klarheit habe ich die längste Kurve im resultierenden Muster übermalt:

Diese Kurve hat einen Namen - "Fibonacci Wort Fraktal".
Wie bekomme ich diese Sequenz mit Billard? Wir nehmen Billard, dessen Breite = 1 und Höhe =
sqrt2 . An den oberen und unteren Grenzen legen wir die Bewegungsrichtung des Balls fest. Wenn sich der Ball von links nach rechts bewegt hat - schreiben Sie 0, wenn von rechts nach links - schreiben Sie 1.

Zwei Grafiken:
z= lfloory sqrtx rfloor( textrmmod2)

z= lflooryx sqrt2 rfloor( textrmmod2)

Sie können sehr lange in dieser Richtung weitermachen - Muster haben viele interessante Eigenschaften. Aber der Artikel war schon zu umständlich. Ich werde am Ende über eine der interessanten Eigenschaften berichten.
Bei der Anzeige von Bildern kann es bei einigen Benutzern zu einem epileptischen Anfall kommen.Bei binärem Billard haben wir den Ball von der oberen linken Ecke aus gestartet und die Matrix mit Bits gefüllt.
Für Billard 610x377:

Vergrößerter Teil des Musters:

Wenn Sie den zweiten Ball aus einem anderen Winkel starten (von unten links für Billard 610x377) und die Bits markieren, die für beide Trajektorien übereinstimmen, erhalten wir ein sehr interessantes Muster:

Übereinstimmende Bits sind mit schwarzen Pixeln markiert. Vergrößerter Teil des Musters:

Es gibt zwei weitere Möglichkeiten, dieses Muster zu zeichnen. Einer von ihnen wurde im Artikel
Perfect Shuffle erwähnt . Zweitens:
Zeichnen wir ein Diagramm der Funktion:
z= sin(x pi( sqrt5+1))+ sin(y pi( sqrt5+1))
Und mit schwarzen Punkten markieren
z<0 ::

Vergrößerter Teil des Musters:
