LOGO/Coordinate: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 83:
==Grafico di funzioni==
 
Se vogliamo realizzare una procedura che disegni il grafico di una funzione, dobbiamo usare esplicitamente il riferimento cartesiano.
Di seguito riporto una soluzione non certo completa al problema, ma non proprio banale.
 
Prima di tutto però ci sarà utile avere una procedura che inizializzi il nostro riferimento cartesiano fissando una scala per le ascisse, una per le ordinate fissi la dimensione della finestra grafica (qui la suppongo quadrata) e disegni gli assi.
{{Avanzamento|0%}}
 
to inizializzapc
clearscreen
make "sx 10
make "sy 10
make "min -250
make "max 250
window
hideturtle
assi
end
Il comando ''window'' fa sì che quando la tartaruga esce da un lato dello schermo non rientri dall'altro.
 
Per gli assi devo assicurarmi che la penna sia giù, scelgo un colore adatto, poi:
* disegno un asse,
* ruoto la tartaruga e disegno l'altro asse,
* disegno un punto nella posizione (1; 1) per avere un riferimento relativo alla scala.
 
to assi
setpencolor 7
pendown
asse
right 90
asse
left 90
penup
setpos list :sx :sy
pendown
setpos list :sx :sy
end
 
Usando la grafica della tartaruga non è difficile ottenere i singoli assi con le freccine regolamentari:
 
to asse
back 250
forward 500
left 30
back 10
forward 10
right 60
back 10
forward 10
left 30
back 250
end
 
''grafico'' riceve una lista che contiene la funzione e il colore assegna il colore della penna e poi traccia il grafico:
 
to grafico :funzione :colore
setpencolor :colore
traccia :min "primo
pendown
end
 
La procedura ''traccia'' è piuttosto complessa:
* Realizza un ciclo ricorsivo che porta la variabile "xs dal bordo sinistro ('':min'') al bordo destro ('':max'').
* Se è il primo punto di un arco, sposta lì il puntatore grafico senza disegnare.
* Se nel calcolo della funzione ottiene un errore o se la funzione esce dai bordi, sospende il disegno.
* La procedura deve anche eseguire la trasformazione da coordinate relative allo schermo ('':xs'' e '':ys'') a coordinate relative al piano cartesiano ('':x'' e '':y'') e viceversa.
 
to traccia :xs :stato
if :xs>:max [stop]
ifelse equalp :stato "primo [penup] [pendown]
make "x :xs/:sx
catch "error [make "y run :funzione]
ifelse not emptyp error [
make "stato "primo][
make "ys :y*:sy
ifelse and -1000<:ys :ys<1000
[make "stato "
setpos list :xs :ys]
[make "stato "primo]
]
traccia :xs+10 :stato
end
 
Le seguenti istruzioni disegnano un riferimento cartesiano, una retta e una parabola:
 
inizializzapc
grafico [2*:x-8] 3
grafico [0.1*:x*:x+2*:x-8] 2
 
 
{{Avanzamento|050%}}
 
[[Categoria:LOGO|Coordinate]]