/*** LEIA-ME.TXT ***/

==========================================================================
1. COMPILACAO
==========================================================================

     Antes da compilacao, deve ser criado um arquivo de nome "equacoes.c"
que contenha  as  equacoes parametricas e os dominios das superficies en-
volvidas.
     Opcionalmente, pode ser acrescentado um arquivo de nome "ajustes.c"
com os valores de algumas constantes (essas constantes tambem  podem ser
definidas no arquivo de configuracao, veja item 4 a seguir).
     Sao fornecidos 22  exemplos  pre'-definidos.  Para  utilizar  esses
exemplos, basta incluir uma opcao do tipo -DEXEMPLOn na linha de comando
onde n = 1, 2,..., 22 (neste caso os arquivos "equacoes.c" e "ajustes.c"
ja' foram fornecidos juntamente com o programa).
     No MS-DOS, uma linha de comando para compilacao pode ser uma das
seguintes:
            TCC -2 -C -ml -DEXEMPLO3 inter.c      (Turbo C)
            TCC -ml inter.c                       (Turbo C)
            gcc -DEXEMPLO5 -oINTER5.EXE inter.c   (GCC)

     No Unix, a compilacao pode ser feita digitando-se uma linha
de comando conforme os exemplos:

            gcc -DEXEMPLO1 -ointer1 inter.c -lm
            gcc inter.c -lm

     Os arquivos "equacoes.c" e "ajustes.c" podem ser criados conforme os
seguintes exemplos:


---------------------------- EQUACOES.C ----------------------------------
double f1(double u, double v) { return v; }
double f2(double u, double v) { return sqrt(3)*cos(u)*v; }
double f3(double u, double v) { return sqrt(3)*sin(u)*v; }

double g1(double u, double v) { return 1 + cos(u); }
double g2(double u, double v) { return sin(u); }
double g3(double u, double v) { return v; }

retangulo Ret1 = {-PI, PI, -2, 2}, Ret2 = {-PI, PI, -5, 5};
--------------------------------------------------------------------------


---------------------------- AJUSTES.C -----------------------------------
    TAM = 30;
    FI = -0.8, TETA = -0.9;
    nuF = 25, nvF = 30, nuG = 40, nvG = 20;
    X_CENTRO = 480, Y_CENTRO = 220;
    PASSO_L = 0.05;
    NIVEL_SUBDIV = 4;
--------------------------------------------------------------------------


==========================================================================
2. EXECUCAO
==========================================================================

     Durante a execucao do programa sao mostradas as diferentes etapas do
algoritmo. 
     Um  exemplo  das  mensagens  mostradas pelo programa esta' anexado a
seguir.


# Configuracao definida em inter12.cfg

# Subdivisao dos dominios ate' nivel 2

       Pontos encontrados na subdivisao: 51 (subdiv.txt)
       Pontos selecionados: 4 (class1.txt)

# Tempo gasto na subdivisao: 3.08 s

# Caminhando com passo circular (L = 0.05)

# Pontos salvos em dados.txt

       Pontos que convergem com 1 iteracao: 538 (24.04 %)
       Pontos que convergem com 2 iteracoes: 1700 (75.96 %)
       Total de pontos: 2238

# Pontos distintos salvos em dados2.txt

       Total de pontos distintos: 551 (24.62 %)
       Distancia minima entre os pontos: 0.1
       Pontos que convergem com 1 iteracao: 133 (24.14 %)
       Pontos que convergem com 2 iteracoes: 418 (75.86 %)

# Tempo gasto na caminhada: 9.01 s

# Configuracao salva em config.txt


==========================================================================
3. RESULTADOS 
==========================================================================

     Os resultados sao mostrados apenas de forma numerica. Os valores sao
salvos em um arquivo-texto (por exemplo, DADOS.TXT).  Os  graficos  podem
ser desenhados utilizando-se  outros programas que  interpretem o arquivo
texto de saida dos dados.
     O usuario pode selecionar o que e' para ser mostrado nesse  arquivo.
A seguir um exemplo de saida do programa. Os resultados sao mostrados com
3 casas decimais (valor configurado pelo usuario) e sao mostrados os pon-
tos da curva-intersecao, os pontos  equivalentes nos dominios, os vetores
tangentes e a quantidade de iteracoes necessarias para obter convergencia.
       

(ponto inters) (pt dom F) (pt dom G) (vetor tg) [iter]
(-3.259 0.853 6.730) (-1.276 0.569) (-3.259 0.853) (0.480 0.804 0.351) [2]
(-3.211 0.935 6.763) (-1.282 0.623) (-3.211 0.935) (0.477 0.825 0.304) [2]
(-3.163 1.018 6.791) (-1.289 0.679) (-3.163 1.018) (0.473 0.843 0.256) [2]
(-3.116 1.103 6.814) (-1.298 0.736) (-3.116 1.103) (0.470 0.858 0.207) [2]
(-3.069 1.190 6.833) (-1.308 0.793) (-3.069 1.190) (0.467 0.870 0.159) [2]
(-3.046 1.233 6.840) (-1.314 0.822) (-3.046 1.233) (0.465 0.875 0.135) [2]
(-3.023 1.277 6.846) (-1.319 0.851) (-3.023 1.277) (0.464 0.879 0.112) [2]
(-3.000 1.321 6.851) (-1.326 0.881) (-3.000 1.321) (0.463 0.882 0.090) [2]
(-2.977 1.365 6.855) (-1.332 0.910) (-2.977 1.365) (0.463 0.884 0.068) [1]
(-2.953 1.410 6.858) (-1.339 0.940) (-2.953 1.410) (0.462 0.886 0.047) [1]


==========================================================================
4. CONFIGURACAO
==========================================================================

      As constantes mais  importantes do programa podem ser alteradas pelo
usuario sem necessidade de recompilacao do programa.
      Para isto, basta editar um arquivo texto que tenha o mesmo  nome que
o programa e extensao ".cfg".
      A seguir, um exemplo de arquivo de configuracao. Um tal arquivo pode
conter somente algumas linhas, alterando somente algumas constantes.
      Algumas constantes sao usadas pelo programa que calcula os pontos  e
outras constantes sao usadas pelos programas que constroem os graficos.


. CONFIGURACAO DO PROGRAMA DE CALCULO DA INTERSECAO DE DUAS SUPERFICIES
.......................................................................
.
. Constantes usadas em todo o programa
.
arq_dados = dados.txt   ; nome do arquivo de dados padrao
mouse = sim             ; determina se usa mouse nos pts dominio
circular = sim          ; determina se usa metodo do passo circular
passo = 0.050000        ; passo L dos metodos de caminhada
h_erro = 0.00000100     ; erro usado no calculo de derivadas
z_erro = 0.00000100     ; erro na identificacao de dois numeros reais
.......................................................................
.
. Constantes usadas no metodo da subdivisao
.
nivel_sub = 2           ; nivel maximo de subdivisao
nivel_cla = 1           ; nivel de selecao de pontos subdiv.
subdiv1 = 40            ; usado no nivel 1 da subdivisao
subdiv2 = 30            ; usado no nivel 2 da subdivisao
subdiv3 = 10            ; usado no nivel 3 da subdivisao
subdiv4 = 10            ; usado no nivel 4 da subdivisao
subdiv5 = 10            ; usado no nivel 5 da subdivisao
rastrear = nao          ; determina se mostra pontos encontrados
div_dominio = nao       ; determina se salva em arquivo pts dominio
div_valores = nao       ; determina se salva valores dos pontos
arq_subdiv = subdiv.txt ; arquivo com pts encontrados na subdivisao
arq_class1 = class1.txt ; nome do arquivo 1 de pts selecionados
arq_class2 = class2.txt ; nome do arquivo 2 de pts selecionados
x_outros = nao          ; determina se marca outros pontos nos dominios
dom2 = nao              ; determina se seleciona pontos em dom(G)
.......................................................................
.
. Constantes usadas na construcao dos graficos das superficies
.
tam =  20               ; constante de ampliacao do grafico
xcentro = 399           ; abscissa do centro da tela
ycentro = 249           ; ordenada do centro da tela
fi =-0.400000           ; angulo de rotacao (eixo z)
teta =-0.500000         ; angulo de rotacao (eixo x)
uminf =-3.141593        ; valor minimo do parametro u (superf. F)
umaxf = 3.141593        ; valor maximo do parametro u (superf. F)
vminf =-9.000000        ; valor minimo do parametro v (superf. F)
vmaxf = 9.000000        ; valor maximo do parametro v (superf. F)
uming =-7.500000        ; valor minimo do parametro u (superf. G)
umaxg = 7.500000        ; valor maximo do parametro u (superf. G)
vming =-7.500000        ; valor minimo do parametro v (superf. G)
vmaxg = 7.500000        ; valor maximo do parametro v (superf. G)
nuf = 20                ; numero de subdivisoes de [uminf, umaxf]
nvf = 20                ; numero de subdivisoes de [vminf, vmaxf]
nug = 20                ; numero de subdivisoes de [uming, umaxg]
nvg = 20                ; numero de subdivisoes de [vming, vmaxg]
cor_graf1 =  3          ; cor do grafico da superficie F
cor_graf2 =  4          ; cor do grafico da superficie G
cor_fundo =  0          ; cor de fundo
cor_inter = 14          ; cor da curva-intersecao
cor_eixos =  8          ; cor dos eixos
tam_eixos =  4          ; tamanho dos eixos
n_pontos = 600          ; numero maximo de pontos em cada trecho
graf_x = sim            ; determina se marca pts intersecao com um "x"
eixos = sim             ; determina se mostra eixos x, y, z
pontilhado = sim        ; determina se usa linha pontilhada em graf. F, G
.......................................................................
.
. Constantes usadas na construcao dos graficos dos dominios
.
mens_dom_f= Dominio_de_F; mensagem mostrada no dominio de F
a_domf =   0            ; (a_domf, b_domf) -- (c_domf, d_domf)
b_domf =  10            ; determinam a posicao do dom(F) na tela
c_domf = 150
d_domf = 160
cor_domf =  3           ; cor dos pontos no dominio de F
cor_moldf =  8          ; cor da moldura do dominio de F
mens_dom_g= Dominio_de_G; mensagem mostrada no dominio de G
a_domg =   0            ; (a_domg, b_domg) -- (c_domg, d_domg)
b_domg = 250            ; determinam a posicao do dom(G) na tela
c_domg = 150
d_domg = 400
cor_domg =  4           ; cor dos pontos no dominio de G
cor_moldg =  8          ; cor da moldura do dominio de G
xcor =  8               ; cor dos pontos obtidos na subdivisao
corx = 14               ; cor de pts dominio selecionados com o mouse
corx3d = 15             ; cor de pts espaco selecionados com o mouse
x_subdiv = sim          ; determina se marca com "x" pts subdiv.
dom_limit = sim         ; determina se considera dominio limitado
isolado = nao           ; determina se calcula pontos isolados
.......................................................................
.
. Outras constantes
.
arq_config = config.txt ; arquivo onde e' salva a configuracao
arq_erro = erros.msg    ; nome do arquivo das mensagens de erro
demora =   0            ; milisegundos entre dois pontos mostrados
arq_vetores = sim       ; determina se salva vetores no arquivo
decimais =  3           ; casas decimais utilizadas em valores salvos
iteracoes = sim         ; determina se salva iteracoes em arquivo
emitir_som = nao        ; determina se emite som no final da execucao
arq_circ = nao          ; determina se salva centros dos circulos
arq_dominio = sim       ; determina se salva pontos do dominio
mostra_etapas = sim     ; determina se mostra etapas da execucao
salva_etapas = sim      ; determina se salva etapas da execucao
......................................................................
.
. Informacoes sobre o arquivo de configuracao:
.
% A linha de comentario pode iniciar com um ponto ou com um sinal de %
.
. Comentarios tambem podem ser escritos `a direita de ponto e virgula
.
. Para algumas variaveis o "sim" pode ser fornecido como um "1" ou co-
. mo um "s". O "nao" pode ser fornecido como um "0" ou como um "n".
.
. Nao e' feita distincao entre letras maiusculas ou minusculas.
.
. O arquivo de  configuracao deve ter  o mesmo nome que o arquivo exe-
. cutavel, mas com extensao CFG. (Por exemplo,  PROG.EXE deve ter con-
. figuracao PROG.CFG)
.
. Tabela de cores: (para ser usada no MS-DOS)
.
.     0 = BLACK        1 = BLUE            2 = GREEN
.     3 = CYAN         4 = RED             5 = MAGENTA
.     6 = BROWN        7 = LIGHTGRAY       8 = DARKGRAY
.     9 = LIGHTBLUE   10 = LIGHTGREEN     11 = LIGHTCYAN
.    12 = LIGHTRED    13 = LIGHTMAGENTA   14 = YELLOW
.    15 = WHITE
.
...FIM...
