diff --git a/logistic.c b/logistic.c index f4a981a..4d31464 100755 --- a/logistic.c +++ b/logistic.c @@ -1,364 +1,17 @@ -////////////////////////////////////////////////////////////////////////////////// -// Logistic Map v2.01.c // -// 2007.12.16 // -// Desenha cada conjunto de pontos para cada r de uma vez, // -// permite redimensionamento da janela, diferentes funçoes, // -// Inclui eixos a 100%, faz zoom direitinho, falta a numeracao // -// nos eixos. Faz ouput das variaveis na consola // -////////////////////////////////////////////////////////////////////////////////// -#include -#include #include #include -#include +#include "logistic.h" -#define BORDER 20 -/////////////////////////////////////////////////////////// -//variaveis globais -int n; -int i=0; -long int offset = 50000; -double r_min = 2.3; -double r_max = 4.0; -double x_min = 0.0; -double x_max = 1.0; -int num_pontos = 200; -double x0 = 0.5; -double r = 2.3; -double x = 0.5; -int wgl = 1434; -int hgl = 852; -int mouse_presses = 0; -double zoom_r; -double zoom_x; -int jumps = 800; -double razao_r; -double razao_x; -double margem_r; -double margem_x; - - -void output(GLfloat x, GLfloat y, char *text) +int main() { - char *p; - - glPushMatrix(); - glTranslatef(x, y, 0); - for (p = text; *p; p++) - glutStrokeCharacter(GLUT_STROKE_ROMAN, *p); - glPopMatrix(); -} - -/////////////////////////////////////////////////////////// -//Funcoes Calc -double calc_0(){ - return (r*x*(1-x)); -} - -double calc_1(){ - return (r * sin(x) * (1 - sin(x))); -} - -double calc_2(){ - return (r*pow(x,3)*(1-pow(x,3))); -} - -double (*calc[10])() = {calc_0,calc_1,calc_2}; - -/////////////////////////////////////////////////////////// -//Funcoes set_glbvars (inicializam as variáveis com os melhores valores para cada função calc -int set_glbvars_0(){ - i = 0; - offset = 100000; - r_min = 2.3; - r_max = 4.0; - x_min = 0.0; - x_max = 1.0; - num_pontos = 500; - x0 = 0.5; - r = 2.3; - x = 0.5; - mouse_presses = 0; - jumps = (int) (wgl+100)/(r_max-r_min+2*margem_r); - - razao_r = (r_max-r_min)/(wgl-2*BORDER); - razao_x = (x_max-x_min)/(hgl-2*BORDER); - margem_r = BORDER*razao_r; - margem_x = BORDER*razao_x; -return 1; -} - -int set_glbvars_1(){ - i = 0; - offset = 50000; - r_min = 2.3; - r_max = 20.0; - x_min = 0.0; - x_max = 3.0; - num_pontos = 200; - x0 = 0.5; - r = r_min; - x = x0; - mouse_presses = 0; - jumps = (int) (wgl+100)/(r_max-r_min+2*margem_r); - - razao_r = (r_max-r_min)/(wgl-2*BORDER); - razao_x = (x_max-x_min)/(hgl-2*BORDER); - margem_r = BORDER*razao_r; - margem_x = BORDER*razao_x; -return 1; -} - -int set_glbvars_2(){ - i = 0; - offset = 50000; - r_min = 0; - r_max = 20.0; - x_min = 0.0; - x_max = 20; - num_pontos = 200; - x0 = 0.5; - r = r_min; - x = x0; - mouse_presses = 0; - jumps = (int) (wgl+100)/(r_max-r_min+2*margem_r); - - razao_r = (r_max-r_min)/(wgl-2*BORDER); - razao_x = (x_max-x_min)/(hgl-2*BORDER); - margem_r = BORDER*razao_r; - margem_x = BORDER*razao_x; -return 1; -} - -int (*set_glbvars[10])() = {set_glbvars_0,set_glbvars_1,set_glbvars_2}; - -//Funcao que imprime na consola as variaveis usadas para o desenho -int print_vars(){ - system("clear"); - printf("r_min:\t\t%f\n",r_min); - printf("r_max:\t\t%f\n",r_max); - printf("x_min:\t\t%f\n",x_min); - printf("x_max:\t\t%f\n\n",x_max); - printf("offset:\t\t%ld\n",offset); - printf("num_pontos:\t%d\n\n",num_pontos); - printf("wgl:\t\t%d\n",wgl); - printf("hgl:\t\t%d\n",hgl); -return 0; -} - -/////////////////////////////////////////////////////////// -//Funcão que desenha os eixos -int draw_eixos(){ - //Cor vermelho - glColor3f(1.0f, 0.0f, 0.0f); - glBegin(GL_LINES); + int i; + printf("before itera\n"); + itera(1000, 0.5); - //Eixo RR - glVertex2f(r_min-margem_r/2,x_min); - glVertex2f(r_max+margem_r/3, x_min); - //Eixo XX - glVertex2f(r_min,x_min-margem_x/2); - glVertex2f(r_min,x_max+margem_x/3); - glEnd(); - //Seta RR - glBegin(GL_TRIANGLES); - glVertex2f(r_max, x_min + margem_x/3); - glVertex2f(r_max, x_min -margem_x/3); - glVertex2f(r_max+ 2*margem_r/3, x_min); - //Seta XX - glColor3f(1.0f, .0f, 0.0f); - glVertex2f(r_min - margem_r/3,x_max); - glVertex2f(r_min + margem_r/3, x_max); - glVertex2f(r_min, x_max +2*margem_x/3); - - glEnd(); - glFlush(); -return 1; -} - - ////////////////////////////////////////////////////////// -// Funcão que desenha os pontos no monitor -void RenderScene(void){ - while (i < (offset + num_pontos)){ - x = calc[n](); - glColor3f(1.0f, 1.0f, 1.0f); - glBegin(GL_POINTS); - if ((r>r_min)&&(rx_min)&&(x=10)){ - return 0; - printf("\n./logistic num_funcao\n"); - } - else return 1; - } - -} -/////////////////////////////////////////////////////////// -// Main program entry point -int main(int argc, char* argv[]){ - if (!(verify_args(argc,argv))) return 0; - else { - set_glbvars[n](); - glutInit(&argc, argv); - glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); - glutInitWindowSize(wgl,hgl); - glutCreateWindow("Logistic Map"); - glutDisplayFunc(RenderScene); - glutReshapeFunc(ChangeSize); - glutTimerFunc(1, TimerFunction, 1); - glutMouseFunc(mouse); - SetupRC(); - glutMainLoop(); + for (i=0;i<171;i++){ + printf("r = %f\t\t", (float) (i/100.0 + 2.3)); + printf("x = %f\n", xs[i]); } return 0; }