Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/10/2011, 20:44
Cleryco
 
Fecha de Ingreso: junio-2011
Mensajes: 5
Antigüedad: 12 años, 10 meses
Puntos: 0
Conjunto de mandelbrot

Bueno... Estoy aprendiendo C y tengo que hacer un proyecto en el cual tengo que armar un programita que muestre el conjunto de mandelbrot.. el conjunto de mandelbrot es un fractal (uno de los mas conocidos)
este se muestra generalmente con el "algoritmo del tiempo de escape"
Bueno mi problema es el siguiente..
Yo puedo crear el conjunto .. lo muestro todo genial. La idea es que al hacer click en una parte de la imagen el cojunto se agrande "zoom" que se obtiene aumentando el numero de el numero que divide la funcion.
y que el lugar donde yo hize click se me situe en el centro de la imagen para poder haci hacerlo controlable...
yo logro hacer click y que se hacerque.. el problema es que no logro controlarlo.
Como puedo hacer para que al hacer click mi conjunto vaya al medio?
yo se que devo sumar y restar a la funcion para moverla pero no se como sacar el calculo de cuanto le devo sumar o restar :S
si alguien me puede ayudar genial por que nesecito entregar este proyecto. un saludo y gracias de antemano.
Les dejo el codigo.



Código:
#include<winbgim.h>

#include<stdlib.h>

#include<math.h>
void waitForLeftMouseClick();

int main()
{
int i,m,n,R,G,B,x,y,c,div,primero=1;
float a,aa,b,bb,ca,cb,iteraciones,moverx=0,movery;
initwindow(800,600);
outtextxy(100, 150, "Programa diseñado por Hombre Federico Joel 4° Año 1° divicion Computacion");
outtextxy(300, 300, "Haga CLICK para comenzar");
c=1;
do
{
clearmouseclick(WM_LBUTTONDOWN);
    const int DELAY = 50;
    while (!ismouseclick(WM_LBUTTONDOWN))
        delay(DELAY);
    getmouseclick(WM_LBUTTONDOWN, x, y);
c=c*2;
div=(300*(c));


if (x>400)
moverx=(moverx+(-(x-400)));   */ aqui deveria de sumar y restar para moverla
else
moverx=(moverx+(400-x));       */ funcion y asi lograr hacerla manejable
if (y>300)
movery=(movery+(-(y-300)));
else
movery=(movery+(300-y));

   
for (m=0;m<800;m++)
	{        
		for (n=0;n<600;n++)
		{ 
            i = 0;
            iteraciones=300;
          
            ca = (float) (m - (400+moverx))/div;
			cb = (float) (n - (300+movery))/div;
			a = b = primero = 0;
			
			while ((i < iteraciones) && (sqrt(a*a+b*b) <= 2))
			{
                aa = a*a - b*b + ca;
				bb = 2*a*b + cb;
				a = aa;
				b = bb;
				i++;
		
		    }
		    R=i;
		    G=i+30;
		    B=0;
		   if(i==300)
		  putpixel(m,n,BLACK);
          else
          putpixel(m,n,COLOR(R,G,B)); 
            	          
     		    
        }
    }


}while(!kbhit());

outtextxy(300, 300, "Programa terminado");
closegraph();
}