domingo, 13 de fevereiro de 2011

Usando Gráficos em C - Parte II

Como falei no post anterior, agora vou mostrar algumas funções básicas e seu funcionamento e deixarei um exemplo de plotador de gráfico.

Funções do Exemplo


initwindow(x,y) -> abre tela com um determinado tamanho.
moveto(x,y) -> move, o que seria seu cursor, para um determinado ponto da tela
lineto(x,y) -> desenha uma linha do ponto onde estaria seu cursor até o definido por você.
setcolor(numero_cor) -> coloca uma cor para a linha que você desenhar.
closegraph() -> fecha a tela dos gráficos.
getx() -> retorna a posição atual de x.
gety() -> retorna a posição atual de y.

Outras Funções

 
arc (x, y , anguloini, angfim, raio) -> desenha um arco num ponto definido com angulo inicial, final e raio.
circle (x, y, raio) -> desenha um círculo no ponto definido com um determinado raio.
rectangle (x, y, largura, altura) -> faz um retângulo saindo da posição inicial com uma determinada largura e altura.
cleardevice() -> apaga toda a tela do gráfico.
line (xo, yo, xf, yf) -> Desenha uma linha desde os ponto incial até o ponto final.

setbkcolor (numero_cor) -> coloca uma cor de fundo na tela.
getbkcolor () -> pega a cor de fundo da tela.
getpixel (x, y) -> retorna a cor de um pixel da tela na posição desejada.
outtext (texto) -> Desenha uma palavra na tela do gráfico começando na posição atual.
outtextxy (x, y, texto) -> Desenha uma palavra na tela do gráfico começando na posição desejada.


Algumas fontes:

NIMEP: Universidade Metodista de Piracicaba
Universidade Federal do Rio de Janeiro





Aí embaixo um código que desenha (plota) uma reta de 1º Grau dados os valores de a e b:

  #include <graphics.h>
  #include <stdio.h>
 
  int a,b,i;
  int x1,y1,x2,y2;

  int main()
  {
      initwindow(400,300); //abrindo tela para a parte gráfica do programa com tamanho 400x300 (Pixels)
     
      //traçando os dois eixos de branco (cor padrão, porque eu não defini)
      moveto(200,150);   //vou pro centro
      lineto(300,150);   //faço um traço à direita
      moveto(200,150);   //vou pro centro
      lineto(100,150);   //faço um traço à esquerda
      moveto(200,150);   //vou pro centro
      lineto(200,250);   //faço um traço pra baixo
      moveto(200,150);   //vou pro centro
      lineto(200,50);    //faço um traço pra cima
       
      //voltando ao centro
      moveto(200,150);
     
      //escolhendo a cor verde para diferenciar dos eixos
      setcolor(2);
     
      //coletando os valores de x e y
      printf("Digite os valores de a (coeficiente angular) e b (coeficiente linear):");
      scanf("%d",&a);
      scanf("%d",&b);
 

      printf("\nPontos gerados pela funcao f(x) = %dx + %d (x,y):\n\n",a,b);     
     
      //traçando pontos com valores de x variando de -20 a 20, mesmo que o intevalo fechado [-20,20]     
      for(i=-20; i<=20; i++)        //lembrando que uma reta é a união de infinitos pontos, no nosso caso um segmento de reta de x=-20 a x=20
      {             
       x1 = i;          //valor do x nesse ponto
       y1 = a*x1 + b;   //valor do y nesse ponto
          if(i==-20)    //primeiro ponto
          {
           moveto(200+x1,150-y1);      //move para onde será o primeiro ponto (retorna a origem)
           //*em x eu acrescento e em y eu subtraio, pois para um valor maior de x ele vai crescer para a direita, já o y cresce para baixo
          }
          else
          {
           lineto(getx()-x2+x1,gety()+y2-y1);     //em cada cordenada tira-se e depois acrescenta a variação para chegar ao próximo ponto com uma reta
          }
           y2 = y1;                               //y2 recebe o último valor de y1 para poder retirar a variação e plotar o próximo ponto
           x2 = x1;                               //x2 recebe o último valor de y1 para poder retirar a variação e plotar o próximo ponto 
           printf("\n(%d,%d)",x1,y1);                
      }    

      system("pause");     //esperando o pressionamento de uma tecla qualquer pelo usuário
      closegraph();        //fechando a tela da parte gráfica
      return 0;
  }

Em breve faço outro post com algumas funções a mais e um outro exemplo.

Um comentário:

  1. muito obrigado! pois eu consegui plotar os graficos na origem onde eu deseja-se!

    ResponderExcluir