Geometria
Unità didattiche
La retta 
di Rocco Fazio
L'unità si riferisce al programma del secondo/terzo anno del liceo scientifico tradizionale o sperimentale P.N.I.
Obiettivo
Realizzare una libreria di semplici funzioni per le calcolatrici TI 92, TI 92 Plus e TI 89 utilizzabili per la risoluzione dei problemi della geometria analitica della retta.
Prerequisiti
- equazione cartesiana della retta;
- equazione parametrica della retta
- intersezioni fra due rette;
- baricentro, ortocentro e circocentro di un triangolo;
- distanza tra due punti e di un punto da una retta;
- risoluzione di sistemi lineari di due equazioni in due incognite.
1. Le liste e le operazioni algebriche sulle liste.
La struttura dati più adatta a rappresentare punti del piano cartesiano con le calcolatrici simboliche è senz'altro la lista; una lista è una sequenza di "oggetti" (numeri ad esempio, ma non solo numeri) racchiusi tra parentesi graffe e separati da una virgola : {3,-2,1}.
Nell'insieme delle liste si può operare, tra l'altro, con le operazioni di addizione, sottrazione, moltiplicazione, divisione e prodotto per un numero

2. Realizzazione di una programma che, acquisite in input le coordinate di due punti, restituisca una lista contenente le equazioni parametriche della retta passante per essi.
Il linguaggio di programmazione delle TI-92/ 89 consente di scrivere programmi e funzioni. Una funzione è un insieme di istruzioni, riconosciute con un nome simbolico, che possono essere richiamate da un programma o da un'altra funzione; alla funzione si possono fornire dati (i cosiddetti parametri) ed essa a sua volta può restituire dati. Le nostre calcolatrici possiedono una cospicua libreria di funzioni predefinite (circa 300); tuttavia l'utente può avere la necessità di costruirne altre adatte a soddisfare le esigenze più disparate.
Ci si può chiedere quando è opportuno scrivere una funzione e quando invece è necessario scrivere un programma; non esiste una regola precisa, ma in alcuni casi la scrittura di una funzione è indispensabile. Per esempio:
- se i valori calcolati devono essere rappresentati graficamente o riportati in una tabella;
- se i valori calcolati devono essere inseriti in una espressione.
La stesura di una funzione è legata però ad alcune restrizioni:
- non si possono utilizzare tutte le istruzioni;
- non si possono utilizzare tutte le funzioni;
- si possono utilizzare solo variabili locali, ossia variabili la cui visibilità è interna alla funzione stessa;
- le funzioni non possono richiamare un programma, ma solo altre funzioni, e non possono definire un programma;
- non possono definire funzioni globali, ma solo locali.
Per questo lavoro scegliamo di realizzare esclusivamente delle funzioni, che ci consentono di inserire i valori forniti da esse all'interno di espressioni.
L'immissione di una nuova funzione è un'operazione molto semplice: si apre il menu APPLICATIONS (con l'apposito "tastone"), si seleziona la voce Program Editor e successivamente la voce New

Nella successiva finestra di dialogo occorrerà indicare se si vuol creare una funzione o un programma, e il nome e la cartella nella quale sarà memorizzata:

Nel nostro caso abbiamo deciso di memorizzare la nostra funzione nella cartella geom2d con il nome rettap2p. Dopo aver premuto due volte il tasto ENTER, comparirà un modello vuoto di funzione:

Nel modello sono inseriti gli elementi essenziali per la scrittura di una funzione:
rettap2p: è il nome interno della funzione (la scelta del nome ha lo scopo di ricordarci che la funzione calcola l'equazione parametrica della retta passante per due punti), che coincide con il nome con cui la funzione è inserita nella memoria della calcolatrice; nelle parentesi andranno elencati, separati dalla virgola, tutti i parametri che si devono conferire alla funzione;
Func... EndFunc : sono i due comandi che delimitano il blocco delle istruzioni della funzione.
La retta passante per i punti
e
ha equazioni parametriche
| (1) |
Riempiamo pertanto il modello della nostra funzione nel modo seguente:
rettap2p(a,b)
Func
{a[1]+t*(b[1]-a[1]),a[2]+t*(b[2]-a[2])
EndFunc
Nelle parentesi che seguono il nome della funzione abbiamo indicato come parametri le due variabili a e b, mentre nell'unica istruzione compresa tra i comandi Func ed EndFunc abbiamo costruito una lista i cui elementi sono le espressioni rispettivamente dell'ascissa e dell'ordinata di un punto generico della retta in funzione del parametro t (con a[i] si individua l'i-esimo elemento della lista a).
Ecco per esempio il calcolo delle equazioni parametriche della retta passante per i punti
e
:

3. Realizzazione di un programma per la determinazione dell'equazione cartesiana di una retta passante per due punti distinti.
Il procedimento per la scrittura della funzione è identico a quello seguito nel caso precedente; il codice della funzione rettac2p è il seguente:
rettac2p(a,b) Func Local lista,espress If a[1]=b[1] Then x=a[1] Else rettap2p(a,b)lista solve(x=lista[1],t)
espress y=lista[2]|espress EndIf
EndFunc
L'istruzione Local è stata utilizzata per definire due variabili, lista ed espress; il costrutto If..Then..Else..EndIf è stato utilizzato per distinguere il caso della retta parallela all'asse delle ordinate, più semplice, da quello della retta non verticale. In quest'ultima situazione l'algoritmo si articola in tre passi:
- rettap2p(a,b)
lista
chiama la funzione rettap2p ottenendo le equazioni parametriche della retta che assegna alla variabile lista;
- solve(x=lista[1],t)
espress
risolve la prima equazione parametrica rispetto al parametro t e assegna il risultato alla variabile espress;
- y=lista[2]|espress
sostituisce nella seconda equazione parametrica la variabile espress ottenendo l'equazione cartesiana della retta.
Ecco per esempio il calcolo delle equazioni cartesiane delle rette passanti per i punti
e
:

4. Realizzazione di un programma per la determinazione delle coordinate del punto di intersezione di due rette
Il problema non è di difficile soluzione, tuttavia le cose sono complicate dal caso delle rette parallele. Si può procedere nel modo seguente:
- scriviamo la funzione coefret che, acquisita in input un'equazione lineare in x ed y, la rende implicita e fornisce in output i coefficienti a, b, c:
| coefret(rr) |
|
| Func | |
| Local a,b,c | |
| left(rr)-right(rr)=0 |
- rende implicita l'espressione rr |
| left(rr) |
- elimina la parte destra dell'espressione |
| rr|x=0 and y=0 |
- determina c |
| rr-c |
|
| rr|x=1 and y=0 |
- determina a |
| rr|x=0 and y=1 |
- determina b |
| Return {a,b,c} | |
| EndFunc |
Nella funzione si è fatto un intenso uso dell'operatore | (with) che consente di assegnare temporaneamente un valore ad una variabile;
- scriviamo poi la funzione intersez che restituisce una lista contenente le coordinate del punto di intersezione delle due rette o un messaggio nel caso in cui queste siano parallele:
intersez(rr1,rr2) Func Local stringa,cf1,cf2,soluz "rette parallele"stringa
coefret(rr1)cf1 coefret(rr2)
cf2
If cf1[1]*cf2[2]cf1[2]*cf2[1] Then simult([[cf1[1],cf1[2]][cf2[1],cf2[2]]],[[ªcf1[3]][ªcf2[3]]])
soluz matÐlist(soluz)
soluz Else stringa EndIf EndFunc
Nella funzione si utilizza il comando SIMULT(coeff,costanti) che restituisce il vettore colonna delle soluzioni del sistema lineare avente coeff come matrice dei coefficienti e costanti come vettore colonna dei termini noti. Ecco qualche esempio:

5. Realizzazione di un programma per la determinazione dell'altezza di un triangolo note le coordinate dei suoi vertici.
Si può procedere scrivendo le funzioni seguenti:
- rettapp, che fornisce l'equazione di una retta di assegnata pendenza passante per un punto;
rettapp(pend,a) Func y=expand(pend*(x-a[1])+a[2]) EndFunc
- pendenza, che calcola la pendenza della retta passante per due punti;
pendenza (a,b) Func (b[2]-a[2])/(b[1]-a[1]) EndFunc
- altezza, che fornisce infine l'equazione della retta sostegno all'altezza condotta da un punto del triangolo al lato opposto:
altezza(a,b,c) Func If b[1]=c[1] Then y=a[2] ElseIf b[2]=c[2] Then x=a[1] Else rettapp(ª1/(pendenza(b,c)),a) EndIf EndFunc
Ecco alcuni esempi :

6. Realizzazione di un programma per la determinazione dell'asse di un lato di un triangolo, noti i vertici.
Il programma è molto semplice e non necessita di spiegazioni:
asse(a,b) Func If a[1]=b[1] Then y=(a[2]+b[2])/2 ElseIf a[2]=b[2] Then x=(a[1]+b[1])/2 Else retta(ª1/(pendenza(a,b)),(a+b)/2) EndIf EndFunc
Ecco gli esempi relativi:

7. Realizzazione di un programma per la determinazione della distanza punto-punto e punto-retta.
La realizzazione di questo programma è un tantino complessa in quanto occorre prima di tutto individuare se i parametri sono due punti o un punto e una retta. Allo scopo si utilizza l'istruzione della calcolatrice GetType(variabile), che restituisce un'espressione che specifica il tipo di dato contenuto in variabile (per un elenco completo dei tipi di variabile fare riferimento al manuale d'istruzioni della Ti 89 o 92).
Per il resto, il procedimento non è molto diverso da quello solitamente utilizzato nelle risoluzioni con carta e penna (con il vantaggio che occorre farlo una volta sola):
distanza(expr1,expr2) Func Local punto,retta,x0,y0,a,b,c If getType(expr1)="LIST" and getType(expr2)="LIST" Then Return §((expr1[1]-expr2[1])^2+(expr1[2]-expr2[2])^2) EndIf If getType(expr1)="LIST" Then expr1punto expr2
retta Else expr2
punto expr1
retta EndIf punto[1]
x0 punto[2]
y0 coefret(retta)[1]
a coefret(retta)[2]
b coefret(retta)[3]
c Return abs(a*x0+b*y0+c)/(§(a^2+b^2)) EndFunc
L'istruzione RETURN permette di uscire dal programma restituendo eventualmente l'espressione che lo segue.
L'immagine mostra vari esempi di calcolo:

8. Realizzazione di una funzione per la determinazione dell'area di un triangolo di cui sono note le coordinate dei vertici.
È sufficiente mettere insieme una parte di ciò che è stato fatto finora:
areatri(a,b,c) Func Local stringa,espress "punti allineati"stringa rettac2p(a,b)
espress If (espress|x=c[1] and y=c[2]=true) Then Return stringa Else distanza(b,rettac2p(a,c))*distanza(a,c)/2 EndIf EndFunc
Ecco le schermate relative:

Commenti sull'argomento
Se sei un iscritto a Cartesio puoi lasciare il tuo commento su questo argomento. Per iscriverti, clicca qui.
Al momento non ci sono commenti.



