El triángulo de Sierpinski es un conjunto fijo fractal y atractivo con la forma general de un triángulo equilátero. Se subdivide recursivamente en triángulos más pequeños.
Acercarse:
- En el segmento de códigos dado, se crea un triángulo y luego se dibujan otros tres pequeños triángulos adyacentes hasta que la condición de terminación que comprueba si la altura del triángulo es inferior a 5 píxeles se vuelve verdadera.
- Solo necesitamos verificar si un triángulo dado es menor de 5 píxeles, ya que más allá de eso, los triángulos comenzarían a converger en puntos fijos.
- Se define un contador colorVal en respuesta a la necesidad estética del triángulo y, en general, recorre todos los colores disponibles al iterar cada conjunto de triángulos.
- Con esta metodología, también podemos implementar un zoom fractal e hipotéticamente proporcionar un zoom infinito más adelante.
A continuación se muestra la implementación del enfoque anterior:
// C++ code to implement // Sierpinski Triangle using Graphics #include <math.h> #include <stdlib.h> #include <winbgim.h> #define Y 900 #define X 1600 // Defining a function to draw a triangle // with thickness 'delta' void triangle(float x, float y, float h, int colorVal) { setcolor(colorVal % 15 + 1); for (float delta = 0; delta > -5; delta -= 1) { line(x - (h + delta) / sqrt(3), y - (h + delta) / 3, x + (h + delta) / sqrt(3), y - (h + delta) / 3); line(x - (h + delta) / sqrt(3), y - (h + delta) / 3, x, y + 2 * (h + delta) / 3); line(x, y + 2 * (h + delta) / 3, x + (h + delta) / sqrt(3), y - (h + delta) / 3); } } // Defining a function to draw // an inverted triangle // with thickness 'delta' void trianglev2(float x, float y, float h, int colorVal) { setcolor(colorVal % 15 + 1); for (float delta = 0; delta > -1 + 5; delta -= 1) { line(x - (h + delta) / sqrt(3), y + (h + delta) / 3, x + (h + delta) / sqrt(3), y + (h + delta) / 3); line(x - (h + delta) / sqrt(3), y + (h + delta) / 3, x, y - 2 * (h + delta) / 3); line(x, y - 2 * (h + delta) / 3, x + (h + delta) / sqrt(3), y + (h + delta) / 3); } } // A recursive function to draw out // three adjacent smaller triangles // while the height is greater than 5 pixels. int drawTriangles(float x = X / 2, float y = 2 * Y / 3, float h = Y / 2, int colorVal = 0) { if (h < 5) { return 0; } if (x > 0 && y > 0 && x < X && y < Y) { triangle(x, y, h, colorVal); } drawTriangles(x, y - 2 * h / 3, h / 2, colorVal + 1); drawTriangles(x - h / sqrt(3), y + h / 3, h / 2, colorVal + 1); drawTriangles(x + h / sqrt(3), y + h / 3, h / 2, colorVal + 1); return 0; } // Driver code int main() { initwindow(X, Y); trianglev2(X / 2, 2 * Y / 3, Y, 2); drawTriangles(); getch(); closegraph(); return 0; }