# LOGO/Coordinate

· StoriaLOGO/Storia · IntroduzioneLOGO/Introduzione · MovimentiLOGO/Movimenti · ProcedureLOGO/Procedure · VariabiliLOGO/Variabili · RicorsivitàLOGO/Ricorsività · Parole e listeLOGO/Parole e liste · Input ed OutputLOGO/Input ed Output · CoordinateLOGO/Coordinate · AssonometriaLOGO/Assonometria · ApprofondimentiLOGO/Approfondimenti

## Coordinate

In logo è preferita la grafica della tartaruga che ha un riferimento intrinseco, riferito alla posizione e alla direzione di chi traccia il disegno, ma è presente anche un riferimento estrinseco: il riferimento cartesiano. Ci sono problemi in cui il riferimento cartesiano può ritornare utile. Ci sono sostanzialmente due primitive relative al riferimento cartesiano:
pos che restituisce una lista che contiene le coordinate dell'attuale posizione del puntatore grafico (la tartaruga).
setpos :p che muove il puntatore grafico nella posizione contenuta dalla lista di numeri :p.

## Triangolo rettangolo

Un primo problema che chiama l'uso di pos e setpos è il disegno di un triangolo rettangolo dati i cateti. È possibile risolverlo anche usando arctan, ma oltre a dover usare una funzione goniometrica, dà alcuni errori dovuti all'approssimazione e non funziona in certi casi particolari.
Per disegnare un triangolo rettangolo, possiamo disegnare un cateto, memorizzare la posizione raggiunta, disegnare l'altro cateto, spostare il puntatore grafico nella posizione memorizzata precedentemente e rimettere la tartaruga dove era stata presa:
Vediamola istruzione per istruzione:
Dato che la procedura deve memorizzare una posizione, si crea una variabile locale:
Disegna il primo cateto:
Associa alla parola "v1 la posizione attualmente occupata dalla tartaruga:
Torna indietro e disegna l'altro cateto:
Sposta il puntatore grafico nella posizione associata alla parola "v1:
Rimette la tartaruga dove si trovava all'inizio della procedura:
Da notare che:
* Questi ultimi due comandi non possono essere sostituiti dal comando home, perché non è detto che tutti i triangoli rettangoli che si vogliono disegnare inizino (e quindi debbano terminare) nel centro dello schermo.
* In questa procedura viene usato un riferimento estrinseco (il piano cartesiano), ma non mi devo preoccupare di come è effettivamente realizzato, potrebbe anche usare coordinate polari, per capire la procedura basta sapere che la tartaruga può memorizzare una posizione e può raggiungere una certa posizione.
trirett è una procedura semplice ma si presta per risolvere problemi interessanti:
* Si possono costruire i vari quadrilateri usando solo spostamenti e triangoli rettangoli.
* Si possono realizzare inviluppi di triangoli rettangoli.
Per quanto riguarda il secondo di questi problemi si può scrivere una procedura che disegni un triangolo rettangolo, poi uno con il primo cateto diminuito e il secondo aumentato di una certa quantità poi un altro sempre con un cateto un po' più piccolo e l'altro un po' più grande, e così via:
Sopra ho riportato una soluzione ricorsiva, ma si sarebbe potuta realizzare anche una procedura semplicemente sequenziale:
Possiamo combinare diversi inviluppi per ottenere figure più complicate:
O più complicate ancora...

## 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.
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.
Usando la grafica della tartaruga non è difficile ottenere i singoli assi con le freccine regolamentari:
grafico riceve una lista che contiene la funzione e il colore assegna il colore della penna e poi traccia il grafico:
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.
Le seguenti istruzioni disegnano un riferimento cartesiano, una retta e una parabola: