Bandt 12 gon with exact overlap

Hình "Bandt 12 gon" là cách gọi ngắn gọn của Bandt 12 gon with exact overlap là một hình Tự đồng dạng[1] được các Học trò và những Người hâm mộ gọi theo tên của Nhà toán học người Đức, Giáo sư Tiến sĩ Christoph Bandt[2] là người tạo ra nó với cấu trúc Exact overlap[3] hoặc Overlapping construction[4][5][6] nghĩa là các Thành phần cấu tạo nên nó Giao nhau[7] một cách chính xác. Bandt 12 gon gồm có 12 vòng có màu khác nhau giao nhau và đồng dạng với cái hình lớn ngoài cùng. Cho dù đi sâu vào chi tiết, phóng to vô hạn lần ở bất kỳ điểm nào của hình, chúng ta đều thấy cấu trúc giống hệt hình toàn thể.

Lịch sử sửa

Trong Hình học Fractal thì người ta quan tâm tới các hình của các Tập tự đồng dạng (Self-similarity), ở đó mỗi thành phần cấu tạo nên nó đều đồng dạng với cái toàn thể. Để biết được rõ ràng cấu trúc của nó như Chiều Hausdorff và các tính chất Tô pô người ta quan tâm tới các hình tự đồng dạng mà các thành phần của nó chỉ chạm ( Just touching ) (chạm nhau tại hữu hạn điểm, vô hạn điểm, hoặc Rep-tile), nói chính xác hơn là thoả mãn Điều kiện mở tiếng Anh là Open set condition[8][9] hoặc Exact overlap (giao nhau một cách chính xác). Như hình vẽ ở đây, 12 vòng nhỏ, tạo nên vòng lớn, các vòng nhỏ đều giao với nhau một cách trùng khít và chúng đồng dạng với vòng lớn. Christoph Bandt tạo ra hình vẽ này vào năm 2008 và cùng năm đó ở hội thảo về FractalWavelet tại Đại học Greifswald, Đức, lần đầu tiên hình vẽ này dùng làm Logo trên thẻ tham dự của các đại biểu hội thảo từ ngày 7 tới ngày 13 tháng 9 năm 2008.[10]

Cấu trúc sửa

Tập tự đồng dạng sửa

Để tạo ra Hình tự đồng dạng này, người ta sử dụng một Hệ hàm lặp[11] gọi là IFS[11] là viết tắt của Interated Function System. Hệ hàm lặp[11] này là tập hợp các Hàm co[12][13] tiếng Anh gọi là Contraction mapping[12].

Theo Định lý Điểm bất động (Fixed point theorem) thì đối với 1 hàm co thì sẽ có 1 Điểm bất Động[14] Như vậy rất có lý nếu suy luận rằng đối với nhiều hàm co thì sẽ có 1 tập hợp các điểm bất động. Điều này được khẳng định bởi định lý của Moran’s (1946)[15][16] và sau đó được phát triển bởi nhiều nhà toán học khác Hutchinson (1981), Kenneth Falconer[17] Tập hợp các điểm này làm thành một hình gọi là Attractor[5][14] hay một Tập tự đồng dạng[18] (Self-similar set[1][5]).

Hệ hàm lặp IFS của Bandt 12gon sửa

Hệ hàm lặp IFS viết dưới dạng số phức sửa

Bandt 12 gon được tạo bởi 12 hàm co với hệ số co[19] (contraction ratio[5]) bằng nhau và bằng   và tịnh tiến tới các đỉnh của đa giác đều 12 cạnh như vậy hệ IFS gồm 12 hàm như sau

 

Hệ hàm lặp IFS viết dưới dạng ma trận sửa

Hệ hàm co   được viết dưới dạng ma trận như sau:

 
 
 
 
 
 
 
 
 
 
 
 

Các ma trận hệ số của các hàm co này đều có giá trị riêng  tức là xấp xỉ 0.2679 và véc tơ riêng [20] là véc tơ 0, nghĩa là nó đơn thuần làm thu nhỏ vật thể mà nó tác động theo hệ số co[19] là 0.2679.

Số chiều Hausdorff của Bandt 12gon sửa

Khái niệm thể tích hay diện tích, số chiều tô pô (chiều ở không gian thông thường) bị bất lực để cung cấp thông tin về Bandt 12gon và các tập tự đồng dạng nói chung. Chính vì thế cần phải sáng tạo ra một độ đo mới, số chiều mới, để có thể biểu diễn thông tin của những hình mà không thể biểu diễn được bằng các khái niệm trước đó. Felix Hausdorff đã đưa ra một niệm chiều không gian mới không nhất thiết phải là số nguyên như chiều tô pô[21]. Trong mặt phẳng (không gian R^2) nếu một hình kín đặc sẽ có chiều tô pô là 2, trong không gian R^3 một vật thể đặc kín sẽ có chiều tô pô là 3. Bandt 12gon không phải là Tấm lát (Tile) lát (tilling) kín R^2, nó rỗng vì thế có chiều Hausdorff sẽ bé hơn 2 và lớn hơn 1. Chiều Hausdorff có thể hình dung như nó dùng để đo độ đậm đặc, độ kín của một vật thể. Nhiều tác giả đã xây dựng công thức và phương pháp tính chiều Hausdorff cho các tập tự đồng dạng[3][4]. Tuy nhiên chiều Hausdorff của Bandt 12gon không tính được dễ dàng bởi vì phần giao nhau của các mảnh có địa chỉ vô tận.

Cách máy tính tạo ra Bandt 12 gon và các tập tự đồng dạng sửa

Trên lý thuyết thì chúng ta có thể vẽ Bandt 12 gon hoặc các tập tự đồng dạng nói chung, bằng tay. Nghĩa là dùng giấy và bút để vẽ. Nó giống như vẽ đồ thị của hàm số bằng tay vậy, còn ở đây là " đồ thị" của nhiều hàm số. Người ta không gọi chúng là "đồ thị" nữa mà gọi là Attractor hay là Self-similar set. Và nhiều hàm số thì người ta gọi là hệ hàm lặp IFS. Tại sao lại có chữ lặp (interated) bởi vì các hàm này tác động lặp lại nhiều lần thì cho tới khi xuất hiện điểm bất động. Bất kể đầu vào (input) là tập hợp như thế nào, đầu ra (output) sẽ là một tập bất động tự đồng dạng. Chẳng hạn hàm số căn bậc hai nhé, bạn cho đầu vào là 1000, hay 10.000 thì bấm căn bậc hai nhiều lần số này, thì kết quả ngày càng bé dần và tới 1 thì dừng lại, số 1 chính là điểm bất động. Hoặc hàm số   sẽ có điểm bất động là số 0.

Vì chắc chắn có một Attractor hay Self-similar set của hệ hàm lặp IFS. Nên đầu vào input chúng ta có thể lấy một điểm bất kỳ, sau đó cho tập hợp các hàm co tác động lên điểm đó lặp đi lặp lại một cách ngẫu nhiên. Và ta vẽ ảnh của các điểm sau khi các hàm co tác động đủ nhiều để có thể cho ra tập bất động.

Cụ thể, ta chọn một số bất kỳ 1 hoặc 0, hoặc một điểm bất kỳ trên mặt phẳng. Có thể lấy điểm nằm ngay gốc toạ độ. Sau đó áp các hàm co một cách ngẫu nhiên, liên tiếp lên các điểm mới được tạo. Số lần các hàm thực hiện càng nhiều thì ta được Tập tự đồng dạng càng rõ nét và chính xác.

Như vậy với tốc độ xử lý của máy tính mới có thể vẽ được một tập tự đồng dạng, về lý thuyết vẽ tay có thể được, nhưng ko ai đủ kiên nhẫn để xác định các điểm bất động khi áp các hàm co ngẫu nhiên và liên tiếp hàng triệu lần cả. Chính vì lý do đó mà khi chưa xuất hiện máy tính một cách phổ biến thì Hình học Fractal không được phát triển, các cấu trúc tự đồng dạng lúc đó chỉ nằm ở công thức.

Một số code lập trình để vẽ Bandt 12 gon sửa

Có thể sử dụng một số phần mềm lập trình như R, C, Java, Mathematica, Matlab... để vẽ Bandt 12 gon.

MATLAB sửa

Code cho hệ hàm lặp viết dưới dạng số phức

function Bandt12gon;
z = zeros (1,1000000);
a1=cos(2*pi/12)+i*sin(2*pi/12);
a=repmat(a1,1,12).^(1:12);
r=tan(pi/12);
hold off;
plot(0,'w.','MarkerSize',1)
hold on;
k=floor(12*rand(size(z)))+1;
for n=2:length(z);
z(n)=r*z(n-1)+a(k(n));
end
for m =1:12
plot(z(k==m),'.','Color',rand(3,1),'MarkerSize',1)
end
axis equal

Code mathlab này được viết bởi duymt[22][23]

MATLAB sửa

Code cho hệ hàm lặp viết dưới dạng ma trận

function Bandt12gon;
x=zeros(1,5000000);
y=x;
a=[repmat(0.2679,1,12)];
b=[repmat(0,1,12)];
c=[repmat(0,1,12)];
d=[repmat(0.2679,1,12)];
e=[1/2 sqrt(3)/2 0 sqrt(3)/2 1/2 -1  -sqrt(3)/2 -1/2 0 -sqrt(3)/2 -1/2 1];  
f=[sqrt(3)/2 1/2 1 -1/2 -sqrt(3)/2 0  -1/2 -sqrt(3)/2 -1 1/2 sqrt(3)/2 0];
I=floor(12*rand(size(x)))+1;
for k=2:length(x);
    x(k)=a(I(k))*x(k-1)+b(I(k))*y(k-1)+e(I(k));
    y(k)=c(I(k))*x(k-1)+d(I(k))*y(k-1)+f(I(k));
end
for k=1:12
plot(x(I==k),y(I==k),'.','MarkerSize',1,'Color',rand(1,3))
end
axis equal

Code mathlab này được viết bởi duymt

Các bạn có thể copy code Mathlab và chay thử online trên trang web này: https://matlab.mathworks.com/

JavaScript (HTML5) sửa

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bandt 12gon</title>
</head>
<body>
    <canvas id="canvas" height="1200" width="1200"></canvas>
    <script>
        let canvas;
        let canvasContext;

        window.onload = function () {
            canvas = document.getElementById("canvas");
            canvasContext = canvas.getContext('2d');
            canvasContext.fillStyle = "black";
            canvasContext.fillRect(0, 0, canvas.width, canvas.height);

            const n = 1000000;
            const points = [];

            let x = y = 0;
            for (let i = 0; i < n; i++) {
                [x, y, k] = bandt10gon(x, y);
                points.push([x, y, k]);
            }

            colors = ["#ff0000", "#ff4500", "#ff8000", "#ffff00", "#adff2f", "#7fff00", "#0fddaf", "#00ffff", "#00bfff", "#0276fd", "#3232cc", "#a020f0"];
            for (let i = 1; i <= 12; i++) {
                points.filter(([x, y, k]) => k == i).forEach(([x, y, k]) => {
                    drawFilledCircle(x, y, 1, colors[i-1]);
                }); 
            }
        };

        const bandt10gon = (x, y) => {
            let r = Math.random();
            let k;
            if (r < 0.0833) {
               x =  0.2679 * x + 0.5;
               y =  0.2679 * y + 0.866;
               k = 1;
            } else if (r < 0.166) {
               x =  0.2679 * x + 0.866;
               y =  0.2679 * y + 0.5;
               k = 2;
            } else if (r < 0.25) {
               x =  0.2679 * x;
               y =  0.2679 * y + 1;
               k = 3;
            } else if (r < 0.333) {
               x =  0.2679 * x + 0.866;
               y =  0.2679 * y - 0.5;
               k = 4;
            } else if (r <  0.4166) {
               x =  0.2679 * x + 0.5;
               y =  0.2679 * y - 0.866;
               k = 5;
            } else if (r < 0.5) {
               x =  0.2679 * x - 1;
               y =  0.2679 * y;
               k = 6;
            } else if (r < 0.5833) {
               x =  0.2679 * x - 0.866;
               y =  0.2679 * y - 0.5;
               k = 7;
            } else if (r < 0.6666) {
               x =  0.2679 * x - 0.5;
               y =  0.2679 * y - 0.866;
               k = 8;
            } else if (r < 0.75) {
               x =  0.2679 * x;
               y =  0.2679 * y - 1;
               k = 9;
            } else if (r < 0.833) {
               x =  0.2679 * x - 0.866;
               y =  0.2679 * y + 0.5;
               k = 10;
            } else if (r < 0.9166) {
               x =  0.2679 * x - 0.5;
               y =  0.2679 * y + 0.866;
               k = 11;
            } else {
               x =  0.2679 * x + 1;
               y =  0.2679 * y;
               k = 12;
            }
            return [x, y, k];
        }

        const drawFilledCircle = (centerX, centerY, radius, color) => {
            centerX = canvas.width * ((0.3*centerX + 0.5));
            centerY = canvas.height - canvas.height * ((0.3*centerY + 0.5));

            canvasContext.beginPath();
            canvasContext.fillStyle = color;
            canvasContext.arc(centerX, centerY, radius, 0, 2 * Math.PI, true);
            canvasContext.fill();
        };

   </script>
</body>
</html>

Code này được đóng góp lần đầu bởi Lê Quang Kỳ (Sinh viên Đại học FPT). Chạy online và sửa trực tiếp tại link: https://www.w3schools.com/code/tryit.asp?filename=GO8VWFS1RXNL. Code tách màu thành phần tại link: https://www.w3schools.com/code/tryit.asp?filename=GO9TZUDBCMRX

Code Python sửa

import numpy as np
import matplotlib.pyplot as plt
import math

a = [[0.2679,0],[0,0.2679]]
e=[[1/2,math.sqrt(3)/2],[math.sqrt(3)/2,1/2],[0, 1],[math.sqrt(3)/2,-1/2],[1/2,-(math.sqrt(3))/2],[-1,0],[ -(math.sqrt(3))/2,-1/2],[-1/2,-(math.sqrt(3))/2],[0,-1],[-(math.sqrt(3))/2,1/2],[-1/2,math.sqrt(3)/2],[1,0]]
I = np.round(np.random.rand(100000)*11).astype('int')
point = []
tmp = []
input_x = [0,0]
input_flag = True

for i in range(len(I)):
    if input_flag:
        tmp = np.dot(a,input_x)+ e[I[i]]
        input_flag = False
        point.append(tmp)
    else:
        tmp = np.dot(a,tmp)+ e[I[i]]
        point.append(tmp)

arr = np.asarray(point)
plt.figure(figsize = (20,20))
plt.scatter(arr[1:,0],arr[1:,1])

Code này được đóng góp lần đầu bởi Đào Lê Bảo Thoa (Sinh viên đại học FPT). Chạy online và sửa trực tiếp chương trình tại link: https://colab.research.google.com/drive/10yq0mABHmBYPV08mBqp3wqSMT7aoiDIN?usp=sharing

Code tách màu thành phần tại link (thêm màu bởi Nguyễn Diễm Uyên Phương (Sinh viên đại học FPT)):

https://colab.research.google.com/drive/1uTdsCGcIGU9zq3wUmxG_ijzsFvDMkbGx?usp=sharing

R code sửa

install.packages("ggplot2") # tải gói ggplot2 nếu chưa cài đặt.
library(ggplot2) # load thư viện ggplot2

set.seed(2000)

p<-tan(pi/12)

a<-matrix(c(p,0,0,p),2,2)

e<-matrix(c(1/2,sqrt(3)/2,sqrt(3)/2,1/2,0,1,sqrt(3)/2,-1/2,1/2,-sqrt(3)/2,-1,0,-sqrt(3)/2,-1/2,-1/2,-sqrt(3)/2,0,-1,-sqrt(3)/2,1/2,-1/2,sqrt(3)/2,1,0),ncol=2,byrow=T)

I<-sample(1:12,100000,replace = T)

n<-length(I)

input_x<-matrix(c(1,2),nrow = 2)

input_flag <- T

bandt<-data.frame(x=rep(NA,n),y=rep(NA,n),z=rep(NA,n))

for(i in 1:n){

  if(input_flag){

    input_flag <- F

    tmp<-a %*% input_x + e[I[i],]

    bandt[i,]<-c(tmp[1,1],tmp[2,1],I[i])
    }

  else{

    tmp<-a %*% tmp + e[I[i],]

    bandt[i,]<-bandt[i,]<-c(tmp[1,1],tmp[2,1],I[i])
    }
}

bandt$z<-as.factor(bandt$z)

gg<-ggplot(data = bandt,aes(x=x,y=y,col=z))+geom_point(size=0.01) + theme(axis.title = element_blank())+

  theme(legend.position = "none")
ggsave("bandt12gon.png",scale = 1,units = "cm", width = 20, height = 20)
print(gg)

C++ code sửa

Sử dụng Lớp QImage trong bộ thư viện Qt (phiên bản 5.15.2).

#include <iostream>
#include <random>
#include <vector>

#include <QtGui/QImage>

bool barnsleyFern(const char* fileName, int width, int height) {
    constexpr int iterations = 100000000;
    int bytesPerLine = 4 * ((width + 3)/4);
    std::vector<uchar> imageData(bytesPerLine * height);

    std::random_device dev;
    std::mt19937 engine(dev());
    std::uniform_int_distribution<int> distribution(1, 100);

    double x = 0, y = 0;
    for (int i = 0; i < iterations; ++i) {
        int r = distribution(engine);
        double k = 100/12;
        if (r <= k) {
            x =  0.2679 * x + 0.5;
            y =  0.2679 * y + 0.866;
        } else if (r <= 2*k) {
            x =  0.2679 * x + 0.866;
            y =  0.2679 * y + 0.5;
        } else if (r <= 3*k) {
            x =  0.2679 * x;
            y =  0.2679 * y + 1;
        } else if (r <= 4*k) {
            x =  0.2679 * x + 0.866;
            y =  0.2679 * y - 0.5;
        } else if (r <= 5*k) {
            x =  0.2679 * x + 0.5;
            y =  0.2679 * y - 0.866;
        } else if (r <= 6*k) {
            x =  0.2679 * x - 1;
            y =  0.2679 * y;
        } else if (r <= 7*k) {
            x =  0.2679 * x - 0.866;
            y =  0.2679 * y - 0.5;
        } else if (r <= 8*k) {
            x =  0.2679 * x - 0.5;
            y =  0.2679 * y - 0.866;
        } else if (r <= 9*k) {
            x =  0.2679 * x;
            y =  0.2679 * y - 1;
        } else if (r <= 10*k) {
            x =  0.2679 * x - 0.866;
            y =  0.2679 * y + 0.5;
        } else if (r <= 11*k) {
            x =  0.2679 * x - 0.5;
            y =  0.2679 * y + 0.866;
        } else  {
            x =  0.2679 * x + 1;
            y =  0.2679 * y;
        }

        int row = height  - height * (0.3*y + 0.5);
        int column = width * (0.3*x + 0.5);
        imageData[row * bytesPerLine + column] = 1;
    }

    QImage image(&imageData[0], width, height, bytesPerLine, QImage::Format_Indexed8);
    QVector<QRgb> colours(2);
    colours[0] = qRgb(255, 255, 255);
    colours[1] = qRgb(0, 160, 0);
    image.setColorTable(colours);
    return image.save(fileName);
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        std::cerr << "usage: " << argv[0] << " filename\n";
        return EXIT_FAILURE;
    }
    if (!barnsleyFern(argv[1], 1000, 1000)) {
        std::cerr << "image generation failed\n";
        return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}

C code sửa

#include <stdio.h>
#include<time.h>
#include <graphics.h>
#include <stdlib.h>
void Bandt(int, int, int);

int main(){
	unsigned long num = 100000;
	int g;
	initwindow(1000,1000,"Bandt 12gon");
	for(g=0; g<13;g++){
		Bandt(1000, num, g);
		if(g==12) g=0;
	}
	
	
	getch();
	closegraph();
	return 0;
}

void Bandt(int width, int iter, int g){
	double x0=0,y0=0,x1,y1;
	int r;
	int u, h;
	time_t t;
	srand((unsigned)time(&t));
	while(iter>0){
		r = rand()%100;
        double k = 100/12;
        int count=0;
        if (r <= k) {
            x1 =  0.2679 * x0 + 0.5;
            y1 =  0.2679 * y0 + 0.866;
           	count=1;
        } else if (r <= 2*k) {
            x1 =  0.2679 * x0 + 0.866;
            y1 =  0.2679 * y0 + 0.5;
            count=2;
        } else if (r <= 3*k) {
            x1 =  0.2679 * x0;
            y1 =  0.2679 * y0 + 1;
            count=3;
        } else if (r <= 4*k) {
            x1 =  0.2679 * x0 + 0.866;
            y1 =  0.2679 * y0 - 0.5;
            count=4;
        } else if (r <= 5*k) {
            x1 =  0.2679 * x0 + 0.5;
            y1 =  0.2679 * y0 - 0.866;
             count=5;
        } else if (r <= 6*k) {
            x1 =  0.2679 * x0 - 1;
            y1 =  0.2679 * y0;
             count=6;
        } else if (r <= 7*k) {
            x1 =  0.2679 * x0 - 0.866;
            y1 =  0.2679 * y0 - 0.5;
             count=7;
        } else if (r <= 8*k) {
            x1 =  0.2679 * x0 - 0.5;
            y1 =  0.2679 * y0 - 0.866;
            count=8;
        } else if (r <= 9*k) {
            x1 =  0.2679 * x0;
            y1 =  0.2679 * y0 - 1;
            count=9;
        } else if (r <= 10*k) {
            x1 =  0.2679 * x0 - 0.866;
            y1 =  0.2679 * y0 + 0.5;
             count=10;
        } else if (r <= 11*k) {
            x1 =  0.2679 * x0 - 0.5;
            y1 =  0.2679 * y0 + 0.866;
             count=11;
        } else  {
            x1 =  0.2679 * x0 + 1;
            y1 =  0.2679 * y0;
            count=12;
        }
        h = width * (0.3*x0+0.5);
		u = width - width * (0.3*y0+0.5);
      
 		putpixel(h,u, g);
		x0 = x1;
		y0 = y1;
		iter--;
	}
}

Code C này được đóng góp lần đầu bởi Nguyễn Giang Nam.(Sinh viên Đại học FPT)

Latex code sửa

Khi vẽ Bandt 12 gon bằng Latex thì sẽ vẽ theo kiểu hoạ sĩ nhìn hình mà vẽ, không sử dụng bản chất toán học tự đồng dạng. Đây là cách vẽ hình một cách trực tiếp vào trong một văn bản nào đó của Latex mà không sử dụng kỹ thuật chèn hình vào văn bản. Code Latex như sau:

\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\newcommand{\vongtron}[1]{
\ifnum#1=0
\else
\begin{scope}
\foreach \col[count=\i from 0] in {blue,yellow,red,green,brown,black,blue,yellow,red,green,brown,black}\draw[\col,ultra thin,fill=white] (\i *30:1) circle ({sin(15.55)});
\end{scope}

\pgfmathtruncatemacro{\k}{#1-1}
\foreach \i in {0,...,11}{

\begin{scope}[shift={(30*\i:1)},scale={sin(15.55)}]
\vongtron{\k}
\end{scope}
}
\fi
}
\begin{tikzpicture}
\vongtron{3}
\end{tikzpicture}
\end{document}

Code Latex này có được viết lần đầu bởi BUI QUY, và có thể chạy online trên trang: https://www.overleaf.com/project hoặc chạy và sửa code trực tiếp ở link này: https://www.overleaf.com/5529583147fsdzzxsjqwqc

Mathlab code cho Bandt 12gon Art sửa

Bandt 12gon có thể vẽ thêm tính nghệ thuật bằng cách thu nhỏ lại với hệ số co là 0.5176 và quay theo ngươc chiều kim đồng hồ một góc Pi/8 và đặt vào tâm của nó. Chúng ta có thể viết code cho Bandt 12gon Art bằng cách sử dụng ma trận quay với giá trị riêng là căn bậc hai của tan(pi/12) và góc quay Pi/8, hoặc viết dưới dạng số phức như code dưới đây.

 
Bandt 12gon Art
function Bandt12gon1
prompt = 'Put the number of point   ';
n = input(prompt)  ;
z = repmat(0,1,n);
a1=cos(2*pi/12)+i*sin(2*pi/12);
a2=cos(2*pi/8)+i*sin(2*pi/8);
a=repmat(a1,1,12).^(1:12);
r=tan(pi/12);
r1=sqrt(r);
hold off;
plot(0,'w.','MarkerSize',1)
hold on;
k=floor(12*rand(size(z)))+1;
for n=2:length(z);
z(n)=r*z(n-1)+a(k(n));
end
plot(z,'.','Color',rand(3,1),'MarkerSize',1)
z1=r1*a2*z;
plot(z1,'.','Color',rand(3,1),'MarkerSize',1)
z2=r1*a2*z1;
plot(z2,'.','Color',rand(3,1),'MarkerSize',1)

axis equal

Các bạn có thể copy code Mathlab và chay thử online trên trang web này: https://matlab.mathworks.com/

Ý nghĩa triết học liên quan sửa

Bandt 12gon hoặc Bandt 12gon Art có thể dẫn chúng ta liên tưởng tới một Mạn đà la trong Mật Tông Tây Tạng bởi sự cân đối hài hoà và sự đồng nhất dù giãn nở ra vô tận hay thu nhỏ vô tận vẫn là chính nó. Không thể lấp đầy mặt phẳng bằng cách đưa các Bandt 12 gon vào phần còn trống ở trung tâm, như trong hình Bandt 12gon Art. Trong bài báo nổi tiếng trên tạp chí Science[24] năm 1967, nhan đề " Bờ biển nước Anh dài bao nhiêu - Tự đồng dạng thống kê và chiều Fractal " nguyên văn tiếng Anh là " How Long Is the Coast of Britain? Statistical Self-Similarity and Fractional Dimension " của Mandelbrot, B. (1967)[25], tác giả bài báo cho biết Độ dài đường biên giới nước Anh là vô tận mặc dù nó vẫn bao quanh một diện tích hữu hạn. Đường biên bao quanh Bandt 12 gon cũng độ dài vô tận và tuỳ ý như vậy. Tất cả các vị trí trên đường biên của Bandt 12 gon không có vị trí nào tồn tại đạo hàm , tính chất này tương tự như đường Koch curve.

Tham khảo sửa

  1. ^ a b “Self similarity”.
  2. ^ “Bandt 12gon exact overlap creator”.
  3. ^ a b “Self-affine fractals of finite type”.
  4. ^ a b “Hausdorfi dimension of self-similar sets with overlaps” (PDF).
  5. ^ a b c d “A generalized finite type condition for iterated function systems” (PDF). line feed character trong |tựa đề= tại ký tự số 49 (trợ giúp)
  6. ^ “Golden gaskets: variation on the Sirpi'nski sieve”.
  7. ^ “Intersection”.
  8. ^ “Hausdorff dimension”.
  9. ^ “ON THE OPEN SET CONDITION FOR SELF-SIMILARFRACTALS”.
  10. ^ “International Conference: Fractal Geometry and Stochastics 4”.
  11. ^ a b c “Iterated function system”.
  12. ^ a b “Contraction mapping”.
  13. ^ “Orthogonal transformation”.
  14. ^ a b “Invariant (mathematics)”.
  15. ^ “P.A.P. Moran, Additive functions of intervals and Hausdorff measure, Proc. Cambridge Philos. Soc. 42 (1946) 15– 23”. line feed character trong |tựa đề= tại ký tự số 112 (trợ giúp)
  16. ^ “J.E. Hutchinson, Fractals and self-similarity, Indiana Univ. Math. J. 30 (1981) 713–747” (PDF).
  17. ^ “K.J. Falconer, Fractal Geometry. Mathematical Foundations and Applications, John Wiley & Sons, Ltd., Chichester, 1990” (PDF). line feed character trong |tựa đề= tại ký tự số 113 (trợ giúp)
  18. ^ “Số chiều Hausdorff”.
  19. ^ a b “Scale factor”.
  20. ^ “Giá trị riêng và vectơ riêng”.
  21. ^ “Hausdorff, Felix; "Dimension and Outer Measure", Classics on Fractals, Reading, MA: Addison-Wesley (1993)”.
  22. ^ “Some Examples of Finite Type Fractals in Three-Dimensional Space”.
  23. ^ “Three-Dimensional Fractals”.
  24. ^ “Science, Vol 156, Issue 3775 05 May 1967”.
  25. ^ “Mandelbrot, B. (1967). "How Long Is the Coast of Britain? Statistical Self-Similarity and Fractional Dimension". Science. 156 (3775): 636–638”.