Today we are going to program Sierpinski Triangle,
But What is Sierpinski Triangle?
Sierpinski Triangle is a very nice triangle fractal, the fractal shows a triangle that has 3 triangles inside of it, and inside everyone of these triangles there is another 3 triangles and so on.
Here is a picture of it:
(This image is taken from Wikipedia)
Some of you may recognize this shape - it is a very common fractal.
Ok, so if you want to read more about this fractal here is a Wikipedia link,
And Now to the Programming:
Ok, I found an algorithm that represents this fractal, and it goes as follows:
1. Write three dots that represent the vertexes of the biggest triangle (the first triangle).
2. Start with a random point that is in the triangle borders.
3. Now choose a random point of the three vertexes you defined earlier, and calculate the distance between the current point and the vertex you choose, and print a point at the half of this distance.
Now use the point you printed and Do step 3 again and again, until you get the requested result.
I added another thing that makes it a bit more interesting. I painted the first vertexes with 3 different colors, red green and blue, and every time I'm printing a point I'm printing it with the color of the vertex that is chosen randomly.
This Program outputs this:
Now you need to remember that this algorithm is not 100% accurate!
Ok so here is the Code:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SerpinskiTri { class Program { static void DotPrint(int x, int y, ConsoleColor col) { Console.ForegroundColor = col; Console.CursorLeft = x; Console.CursorTop = y; Console.Write("."); } static void Main(string[] args) { Console.CursorVisible = false; Console.SetWindowSize(80,40); int times = 0; Random rnd = new Random(); Console.WriteLine(); Console.Write("Enter Number of Times:"); times = int.Parse(Console.ReadLine()); int ChangeX = 35; int ChangeY = 20; int random = 0; for (int i = 0; i < times; i++) { random = rnd.Next(0,3); switch (random) { case 0: //red dot ChangeX = (ChangeX + 35) / 2; // the 35 is the x value of the red dot ChangeY = (ChangeY + 1) / 2; DotPrint(ChangeX, ChangeY, ConsoleColor.Red); break; case 1: // blue dot ChangeX = (ChangeX + 1) / 2; ChangeY = (ChangeY + 35) / 2; DotPrint(ChangeX, ChangeY, ConsoleColor.Blue); break; case 2: // green dot ChangeX = (ChangeX + 70) / 2; ChangeY = (ChangeY + 35) / 2; DotPrint(ChangeX, ChangeY, ConsoleColor.Green); break; } } Console.ReadKey(); } } }
You can also download this project:
Download This Project (rar file)
Run Without Compiling: go to the project folder ->bin -> debug -> SerpinskiTri.exe
Questions = Comments!
I'll try to answer Asap.
hah yay
ReplyDelete