Intersezioni¶
Come usare intersezioni tra oggetti.
Oltre a quelli visti nel capitolo precedente, per poter realizzare costruzioni geometriche abbiamo bisogno di poter creare l’intersezione tra due rette, tra una retta e una circondìferenza o tra due circonferenze.
Strumenti¶
In questo capitolo utilizzeremo i seguenti strumenti di Pyig:
Point(x, y)
crea un punto con date coordinate.Line(p0, p1)
crea una retta passante per p0 e p1.Segment(p0, p1)
crea un segmento di estremi p0 e p1.Intersection(oggetto_0, oggetto_1, [which])
crea un punto di intersezione tra due oggetti.
Problema¶
Crea un piano e inserisci:
- due rette nel terzo e quarto quadrante e il segmento che congiunge la loro intersezione con l’origine;
- una retta e una circonferenza nel secondo quadrante e e i segmenti che congiungono le loro intersezioni con l’origine;
- due circonferenze nel primo quadrante e e i segmenti che congiungono le loro intersezione con l’origine;
Soluzione guidata¶
Crea un nuovo programma e salvarlo con il nome:
gi02Intersezioni.py
. Per creare un nuovo programma: vedi la soluzione guidata del capitolo precedente.Scrivi un’intestazione adeguata.
Scrivi lo scheletro del programma:
- la lettura delle librerie,
- il programma principale,
- l’attivazione della finestra grafica;
e verifica che tutto funzioni.
Ora scriviamo dei commenti che indicano come intendiamo risolvere il problema:
# Creo le due rette # Creo un punto nell'origine degli assi # Creo l'intersezione tra le due rette # Creo il segmento che congiunge l'origine all'intersezione
A questo punto il programma dovrebbe apparire circa così:
# 9/9/14 # Daniele Zambelli # Intersezioni # lettura delle librerie import pyig as ig # programma principale ip = ig.InteractivePlane() # Creo le due rette # Creo un punto nell'origine degli assi # Creo l'intersezione tra le due rette # Creo il segmento che congiunge l'origine all'intersezione # attivazione della finestra grafica ip.mainloop()
Ora iniziamo a popolare di istruzioni il programma principale creando le due rette:
r_0 = ig.Line(ig.Point(-6, -4, width=6), ig.Point(2, -6, width=6)) r_1 = ig.Line(ig.Point(-11, -9, width=6), ig.Point(-3, -8, width=6))
Eseguiamo il programma controllando che rispetti le specifiche.
Ora dobbiamo creare un segmento con un estremo nell’origine, quindi dobbiamo creare un punto nell’origine:
origine = ig.Point(0, 0, visible=False)
e siccome vogliamo che nessuno possa muoverlo, lo facciamo invisibile.
L’altro estremo è l’intersezione delle due rette:
i_0 = ig.Intersection(r_0, r_1, color='red')
Infine creiamo il segmento:
s_0 = ig.Segment(origine, i_0, color='#505010')
A questo punto il programma dovrebbe apparire circa così:
# 9/9/14 # Daniele Zambelli # Intersezioni # lettura delle librerie import pyig as ig # programma principale ip = ig.InteractivePlane() # Creo le due rette r_0 = ig.Line(ig.Point(-6, -4, width=6), ig.Point(2, -6, width=6)) r_1 = ig.Line(ig.Point(-11, -9, width=6), ig.Point(-3, -8, width=6)) # Creo un punto nell'origine degli assi origine = ig.Point(0, 0, visible=False) # Creo l'intersezione tra le due rette i_0 = ig.Intersection(r_0, r_1, color='red') # Creo il segmento che congiunge l'origine all'intersezione s_0 = ig.Segment(origine, i_0, color='#505010') # attivazione della finestra grafica ip.mainloop()
Proviamo il programma e controlliamo che rispetti le specifiche richieste dal problema. Cosa succede quando muovo i punti base di una retta?
Se tutto funziona regolarmente possiamo passare alla seconda parte del problema:
# Creo una retta # Creo una circonferenza # Creo le intersezioni tra la retta e la circonferenza # Creo i segmenti
Per quanto riguarda i primi due punti non dovrebbero esserci problemi, per il terzo invece presenta una novità rispetto a quanto visto per l’intersezione di due rette, infatti una retta interseca una circonferenza in due punti (e non sempre) e noi dobbiamo indicare a Python quale delle due intersezioni vogliamo:
i_1 = ig.Intersection(r_2, c_0, -1, color='red') i_2 = ig.Intersection(r_2, c_0, +1, color='red')
Dopo aver controllato che fin qui il programma funzioni, disegniamo i due segmenti. la seconda parte dovrebbe assomigliare a questa:
# Creo una retta r_2 = ig.Line(ig.Point(-11, 9, width=6), ig.Point(-6, 1, width=6)) # Creo una circonferenza c_0 = ig.Circle(ig.Point(-6, 7), ig.Point(-5, 2)) # Creo le intersezioni tra la retta e la circonferenza i_1 = ig.Intersection(r_2, c_0, -1, color='red') i_2 = ig.Intersection(r_2, c_0, +1, color='red') # Creo i segmenti s_1 = ig.Segment(origine, i_1, color='#10a010') s_2 = ig.Segment(origine, i_2, color='#10a080')
Proviamo il programma e controlliamo che rispetti le specifiche richieste dal problema. Cosa succede quando muovo i punti base della retta?
Completiamo il programma per risolvere anche la terza parte del problema.
Riassumendo
pyig mette a disposizione un oggetto intersezione. L’intersezione tra rette non ha bisogno di ulteriori informazioni, quella tra una retta e una circonferenza o tra due circonferenze richiede un ulteriore argomento: con
-1
si indica un’intersezione, con+1
si indica l’altra. La sintassi del costruttore di un’intersezione è:Intersection(oggetto_0, oggetto_1 [, which] [, visible=True] [, color='blue'] [, width=3] [, name=''])
Prova tu
- Disegna una circonferenza
c_0
con il centro nell’origine, una rettar_0
e un’altra circonferenzac_1
. Disegna in modo evidente le intersezioni tra la rettar_0
e la circonferenzac_0
e tra la circonferenzac_1
e la circonferenzac_0
. - Disegna una circonferenza e una retta. Poi disegna un’intersezione tra la retta e la circonferenza e assegna a questa intersezione il nome: “Ciao”. Poi disegna una circonferenza che ha centro nell’intersezione e passa per il punto (3; 1).
- Disegna le intersezioni tra due circonferenze che hanno centro in un estremo di un segmento e passano per l’altro estremo del segmento.