Curso de Basic
Plotando Gráficos


  Os gráficos são muito úteis para a visualização de dados e funções, fornecendo uma melhor compreensão e análise dos mesmos.


  Deslocando a origem e controlando a escala

  O primeiro passo a ser dado é adaptar a origem do eixo de coordenadas X e Y do sistema para a tela do MSX.
  A origem da tela do MSX é no canto superior esquerdo. Além disso, o eixo Y possui orientação invertida, ou seja, cresce de cima para baixo.
  De forma a determinar a origem do eixo X,Y para qualquer posição da tela, será aplicada a seguinte transformação de translação:
Tx = X + Ox
Ty = Oy - Y
  Obs: essa transformação já inverte o sentido do eixo Y.

  O que essa transformação faz é converter X e Y para as coordenadas da tela do MSX. Assim, as variáveis X e Y são as coordenadas no mundo dos dados ou da função e Tx e Ty são as coordenadas de tela do MSX.
  Outra variável que se deseja controlar é a escala dos pontos. Por exemplo, imagine a função de seno, em que o eixo Y varia de 0 a 1. Se não fosse levada em conta a escala, o traço não sairia da mesma linha. É necessário adaptar este intervalo ao intervalo desejado da tela do MSX.
  A escala é modificada, a partir da seguinte transformação:
Tx = X * Sx
Ty = Y * Sy
  Onde Sx é a escala no eixo X, enquanto que Sy é a escala no eixo Y.

  Juntando as duas transformações, temos:
Tx = (X * Sx) + Ox
Ty = Oy - (Y * SY)


  Plotando pontos na tela do MSX

  Uma vez conhecidas as transformações que irão ajudar a plotar os pontos no MSX, vamos plotar um ponto.
  Seja o ponto P(4,5) e o seguinte intervalo em X [0; 10] e Y [0; 10].
  De acordo com esses dados, podemos definir os eixos próximos aos cantos da tela. Assim:
Ox = 30
Oy = 170

  Agora, vamos definir a área útil do gráfico, ou seja, a área que comportará os limites dos intervalos de X e Y. Elas são denotadas pelas variáveis Lx e Ly, que definem os limites do desenho na tela do MSX, a partir da origem Ox e Oy. Dessa forma, temos:
 │ Ly ↓
 │----
 │          | Lx
 │          | ←
─┼──────────────

  A partir da área útil e dos limites de X e Y, podemos definir as escalas Sx e Sy.
  As fórmulas a seguir definem as escalas para comportar o desenho do gráfico na área útil:
Sx = (Lx - Ox) / Max(X)
Sy = (Oy - Ly) / Max(Y)

  Atribuindo-se para Lx o valor 240 e Ly o valor 20, tem-se:
Sx = (240 - 30) / 10 = 21
Sy = (170 - 20) / 10 = 15

  Agora já estamos pronto para desenhar a função na tela. O programa a seguir desenha o ponto P.
10 DEF FN TX(X) = (X*SX)+OX
20 DEF FN TY(Y) = OY-(Y*SY)
30 OX=30 : OY=170 : SX=21 : SY=15
40 SCREEN 2
50 LINE(OX,0)-(OX,191),15
60 LINE(0,OY)-(255,OY),15
100 '
101 ' Desenha ponto
102 '
110 XX = FN TX(4)
120 YY = FN TY(5)
130 PSET(XX,YY),10
140 GOTO 140

  O resultado é:

 


  O programa anterior pode ser reescrito, de forma a comportar quantos pontos necessários.
  Além disso, observa-se no exemplo anterior, que o ponto não é muito visível. Podemos substituir a plotagem de ponto por uma cruz.
  Assim, temos:
10 DEF FN TX(X) = (X*SX)+OX
20 DEF FN TY(Y) = OY-(Y*SY)
30 OX=30 : OY=170 : SX=21 : SY=15
40 SCREEN 2
50 LINE(OX,0)-(OX,191),15
60 LINE(0,OY)-(255,OY),15
70 GOSUB 200
100 '
101 ' Desenha ponto
102 '
110 XX = FN TX(4)
120 YY = FN TY(5)
130 FOR I=1 TO NP
140 XX=FN TX(P(I,1)) : YY=FN TY(P(I,2))
150 LINE(XX-3,YY)-(XX+3,YY),10
160 LINE(XX,YY-3)-(XX,YY+3),10
170 NEXT I
180 GOTO 180
200 '
201 ' Define pontos
202 '
210 NP=4
220 DIM P(NP,2)
230 FOR I=1 TO NP
240 READ P(I,1),P(I,2)
250 NEXT I
260 RETURN
270 DATA 4,5
280 DATA 1,1
290 DATA 7,1
300 DATA 8,9
  O resultado é:

 



  Plotando funções na tela do MSX

  Serão utilizadas funções trigonométricas para ilustrar como plotar funções no MSX.
  O intervalo de X para essas funções é [0; 2*PI]. O intervalo de Y para essas funções é [-1; 1].
  Como as funções trigonométicas possuem valores positivos e negativos para Y, definiu-se Oy = 95. Ox ficou em 30.
  Para o valor máximo de X, foi definida a posição Lx=240. Assim, tem-se:
Sx = (240-Ox) / (2*PI) = 33.42

  Para o valor máximo de Y, foi definida a posição Ly=20. Assim, tem-se:
Sy = (Oy-20) / (2/1) = 75

  O programa a seguir irá plorar a função seno.
10 DEF FN TX(X) = (X*SX)+OX
20 DEF FN TY(Y) = OY-(Y*SY)
30 DEF FN E(X) = SIN(X)
40 OX=30 : OY=95 : SX=33.42 : SY=75
50 SCREEN 2
60 LINE(OX,0)-(OX,191),15
70 LINE(0,OY)-(255,OY),15
100 '
101 ' Desenha funcao
102 '
110 YY = FN TY(FN E(0))
120 PRESET(OX,YY)
130 FOR X=0 TO 2*3.14159 STEP .1
140 XX = FN TX(X)
150 YY = FN TY(FN E(X))
160 LINE -(XX,YY),10
170 NEXT X
180 X=2*3.14159
190 XX=FN TX(X) : YY=FN TY(FN E(X))
200 LINE -(XX,YY),10
210 GOTO 210
  Obs: o comando LINE -(XX,YY) traça uma linha do ponto atual até a coordenada XX,YY. O primeiro ponto é definido nas linhas 110 e 120 e o último nas linhas 180-200, garantindo que este seja plotado.

  O resultado é:

 


  No caso de funções, deve-se ligar o ponto atual ao ponto anterior através de uma linha, uma vez que a plotagem dos pontos somente não dá continuidade ao desenho.
  A figura a seguir ilutra a plotagem de pontos em vez de linhas.

 


  O STEP da linha 130 define a suavização da curva. Quanto maior o intervalo, menos suave a curva. Veja o exemplo com STEP 0.7:

 


  Agora vamos plotar o cosseno. Para isso, substituir a linha 30 por:
30 DEF FN E(X) = COS(X)
  O resultado é:

 




MARMSX/CURSOS/Basic