14.3: Fractales
- Page ID
- 115227
En esta sección vamos a explorar el uso de transformaciones para generar fractales. Considera el siguiente conjunto de ecuaciones lineales. Cada uno toma un punto 2D como entrada, aplica una\(2 \times 2\) transformación y luego también traduce por una matriz de\(2 \times 1\) traducción
\ [\ begin {split}
T_1:\ left [\ begin {matrix}
x_1\\
y_1
\ end {matrix}
\ right]
=
\ left [\ begin {matrix}
0.86 & 0.03\\
-0.03 & 0.86
\ end { matriz}
\ derecha]
\ izquierda [\ comenzar {matriz}
x_0\\
y_0
\ end {matriz}
\ derecha] +
\ izquierda [\ comenzar {matriz}
0\\
1.5
\ final {matriz}
\ derecha]
: probabilidad = 0.83\ final {división}\ nonumber\]
\ [\ begin {split}
T_2:\ left [\ begin {matrix}
x_1\\
y_1
\ end {matrix}
\ right]
=
\ left [\ begin {matrix}
0.2 & -0.25\\
0.21 & 0.23
\ end { matriz}
\ derecha]
\ izquierda [\ comenzar {matriz}
x_0\\
y_0
\ end {matriz}
\ derecha] +
\ izquierda [\ comenzar {matriz}
0\\
1.5
\ final {matriz}
\ derecha]
: probabilidad = 0.08\ end {split}\ nonumber\]
\ [\ begin {split}
T_3:\ left [\ begin {matrix}
x_1\\
y_1
\ end {matrix}
\ right]
=
\ left [\ begin {matrix}
0.15 & 0.27\\
0.25 & 0.26
\ end { matriz}
\ derecha]
\ izquierda [\ comenzar {matriz}
x_0\
y_0
\ end {matriz}
\ derecha] +
\ izquierda [\ comenzar {matriz}
0\\
0.45
\ final {matriz}
\ derecha]
: probabilidad = 0.08\ end {split}\ nonumber\]
\ [\ begin {split}
T_4:\ left [\ begin {matrix}
x_1\\
y_1
\ end {matrix}
\ right]
=
\ left [\ begin {matrix}
0 & 0\\
0 & 0.17
\ end {matrix}
\ derecha]
\ left [\ begin {matrix}
x_0\\
y_0
\ end {matrix}
\ right] +
\ left [\ begin {matrix}
0\\
0
\ end {matrix}
\ right]: probabilidad = 0.01\ end {split}\ nonumber\]
Queremos escribir un programa que utilice las transformaciones anteriores para generar “aleatoriamente” una imagen. Comenzamos con un punto en el origen (0,0) y luego elegimos aleatoriamente una de las transformaciones anteriores en función de su probabilidad, actualizamos la posición del punto y luego elegimos aleatoriamente otro punto. Cada matriz agrega un poco de rotación y traslación con\(T_4\) como una especie de reinicio.
Para tratar de hacer nuestro programa un poco más fácil, vamos a reescribir las ecuaciones anteriores para hacer un sistema de ecuaciones “equivelentes” de la forma\(Ax=b\) con una sola matriz. Esto lo hacemos agregando una variable adicional\(z=1\). Por ejemplo, verifique que la siguiente ecuación sea la misma que la ecuación\(T_1\) anterior:
\ [\ begin {split}
T_1:\ left [\ begin {matrix}
x_1\\
y_1
\ end {matrix}
\ right]
=
\ left [\ begin {matrix}
0.86 & 0.03 & 0\\
-0.03 & 0.86 & 1.5
\ end {matrix}
\ right]
\ left [\ begin {matrix}
x_0\\
y_0\\
1
\ end {matrix}
\ right]
\ end {split}\ nonumber\]
TENGA EN CUENTA que no cambiamos el valor para\(z\), y siempre es ser 1.
Verificar que el\(Ax=b\) formato generará la misma respuesta que la\(T_1\) ecuación anterior.
El siguiente es un pseudocódigo que usaremos para generar los Fractales:
- Dejar\(x=0\),\(y=0\),\(z=1\)
- Utilice un generador aleatorio para seleccionar una de las transformaciones afín de\(T_i\) acuerdo a las probabilidades dadas.
- Vamos\((x′,y′)=T_{i}(x,y,z)\).
- Parcela\((x′,y′)\)
- Let\((x,y)=(x′,y′)\)
- Repita los pasos 2, 3, 4 y 5 mil veces.
El siguiente código python implementa el pseudocódigo anterior con solo la\(T_1\) matriz:
Modifique el código anterior para agregar en el\(T_2\),\(T_3\) y\(T_4\) transforma.
Describir en palabras las acciones realizadas por\(T_1\),\(T_2\),\(T_3\), y\(T_4\).
Usando las mismas ideas para diseñar y construir tu propio fractal. Le invitamos a inspirarse en Internet. Asegúrate de documentar de dónde viene tu inspiración. Intenta construir algo divertido, único y diferente. Demuestra lo que se te ocurre con tus instructores.