/logistic_map

A program which, given the logistic map (http://en.wikipedia.org/wiki/Logistic_map) or a similar equation, draw its bifurcation diagram (http://en.wikipedia.org/wiki/Bifurcation_diagram).

Primary LanguageC

Packages needed (Ubuntu):
	freeglut3
	freeglut3-dev
	glutg3
	libglut3
	libglut3-dev
	libxmu-dev
	libxmu-headers
	libxmu6
	libxmuu-dev
	libxmuu1 

Run with ./logistic N, where N is the test case number (1<=N<=3)

More information (PT):


-------------------------------------
Bibliotecas etc:
	- Têm que ter instalados os pacotes freeglut3, freeglut3-dev, glutg3, libglut3, libglut3-dev, libxmu-dev, libxmu-headers, libxmu6, libxmuu-dev, libxmuu1  (se calhar não precisam destes todos, eu fui instalando até conseguir compilar :P )
	- Existe uma makefile que ja compila com tudo direitinho, usem-na
	- O programa executa-se com ./logistic n  em que n é um valor inteiro entre 1 e 3 (porque eu so defini 3 casos de teste)
	- Fundamentos teóricos:
	- Basicamente estes desenhos fazem-se partindo de uma função, de um valor inicial, e de um factor r, e aplicando a funcao recursivamente. O que se verifica é que ao fim de muitas iterações a função começa a tender para determinados valores (às vezes para um valores específico, outras vezes dois valores, e por ai fora), dependendo do valor de r.
	- Os desenhos mostram, para cada valor de x, para quantos valores diferentes a função tende ao fim de muitas iterações (quanto mais iterações - offset - e maior o num_pontos, mais preciso fica o mapa, mais demora mais tempo a executar)

-------------------------------------
Acerca do funcionamento do programa:
	- Existem 3 funções (set_glbvars_1,2 e 3 - eu so defini 3, voces podem definir mais) definidas que o que fazem é atribuir os melhores valores às variáveis globais para diferentes casos de teste (tipo número de iterações, largura/altura da janela, etc).
	- Estas funções são depois inseridas num array de funções set_glbvars[10].Quando a main é chamada, é executada uma função verify_args() que verifica se o argumento n passado é válido.
	- Depois na main, é executada a função set_glbvars[n]() para as variáveis globais ficarem com os melhores valores.

-------------------------------------
Variaveis globais mais importantes:
	- offset - numero de vezes que a funçao é iterada antes de desenhar pontos
	- r_min, r_max - acho que sao os valores minimos e máximos de r representados na janela
	- x_min, x_max - a mesma coisa para o x
	- num_pontos - número de pontos a calcular para cada valor de x
	- x0 - valor de partida para x
	- razao e margem - sao variaveis para a funcao de zoom, ja nem sei bem explicar isto

-------------------------------------
Interface:
	- Corram o programa, deixem-no desenhar o mapa e depois é possivel fazer zoom - clicando com o botao esqerdo marcam um ponto no mapa que será o canto superior esqerdo do novo mapa, voltam a clicar e fica definido o canto inferior direito.
	- Podem fazer zoom algumas vezes seguidas (3 ou assim, não abusem porque se bem me lembro aquilo pode crashar se zoomarem mt)
	- para fazer zoom out, botao direito