Vistas de página en total

viernes, 18 de noviembre de 2011

Fractal del Dragon en c#

Recuerdan una publicación anterior donde les presentaba el fractal del dragón usando el algoritmo del dragón el cual esta compuesto por segmentos de lineas que se cruzan siempre en angulo de 90º 


este es el código en c#:



      int Paso = 4096;
        int Signo = -1;
        float[] EjeX = new float[4098];
        float[] EjeY = new float[4098];
        public Form1()
        {
            InitializeComponent();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }


        private void timer1_Tick(object sender, EventArgs e)
        {
            int i;
            Paso = 4096;
            Signo = -1;
            EjeX[1] = pictureBox1.ClientSize.Width / 4; 
            EjeX[4097] = 2 * pictureBox1.ClientSize.Height / 4;
            EjeY[1] = EjeY[4097] = 2 * pictureBox1.ClientSize.Width / 4;
         
            Random ra = new Random();
           Thread.Sleep(1);
        
            for (i = 1; i <= 13; i++)
            {
              
                Refresh();
            
                GenerarDragon();//TColor(RGB(random(256), 0, 0)));
                Paso /= 2;
                 Thread.Sleep(1);
                //delay(1000);
            }


        }
   
        public void GenerarDragon()
        {
            int i, j;
            float dx, dy;
            float x1,y1,x2,y2,x3,y3;
            j = Paso / 2;
           
 Random val = new Random();

            Pen pluma = new Pen(Color.FromArgb(val.Next(256), val.Next(256), val.Next(256)));
//clase estatica de c# para dibujar graficos
            Graphics g = pictureBox1.CreateGraphics();
            for (i = 1; i <= 4096; i += Paso)
            {
                dx = EjeX[Paso + i] - EjeX[i];
                dy = EjeY[Paso + i] - EjeY[i];
                Signo *= -1;
                EjeX[i + j] = EjeX[i] + (dx + (dy * Signo)) / 2;
                EjeY[i + j] = EjeY[i] + (dy - (dx * Signo)) / 2;
               
                x1 = EjeX[i];
                y1 = EjeY[i];
                x2 = EjeX[i + j];
                y2 = EjeY[i + j];
                x3 = EjeX[i + Paso];
                y3 = EjeY[i + Paso];
                g.DrawLine(pluma, x1, y1,x2,y2);
                g.DrawLine(pluma, x2, y2,x3,y3);
              
                
                Thread.Sleep(1);


            }
        }


        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            this.Close();
        }


este es el resultado de esta 

aplicación










para descargar el programa fuente da click aqui

1 comentario:

  1. hola buenas tardes
    como puedo hacer que el fractal dure creandose por unos segundos mas

    ResponderEliminar