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

  1. Crea un nuovo programma e salvarlo con il nome: gi02Intersezioni.py. Per creare un nuovo programma: vedi la soluzione guidata del capitolo precedente.

  2. Scrivi un’intestazione adeguata.

  3. Scrivi lo scheletro del programma:

    1. la lettura delle librerie,
    2. il programma principale,
    3. l’attivazione della finestra grafica;

    e verifica che tutto funzioni.

  4. 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
    
  5. 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()
    
  6. 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.

  7. 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.

  8. L’altro estremo è l’intersezione delle due rette:

    i_0 = ig.Intersection(r_0, r_1, color='red')
    
  9. Infine creiamo il segmento:

    s_0 = ig.Segment(origine, i_0, color='#505010')
    
  10. 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()
    
  11. Proviamo il programma e controlliamo che rispetti le specifiche richieste dal problema. Cosa succede quando muovo i punti base di una retta?

  12. 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
    
  13. 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')
    
  14. 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')
    
  15. Proviamo il programma e controlliamo che rispetti le specifiche richieste dal problema. Cosa succede quando muovo i punti base della retta?

  16. 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

  1. Disegna una circonferenza c_0 con il centro nell’origine, una retta r_0 e un’altra circonferenza c_1. Disegna in modo evidente le intersezioni tra la retta r_0 e la circonferenza c_0 e tra la circonferenza c_1 e la circonferenza c_0.
  2. 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).
  3. Disegna le intersezioni tra due circonferenze che hanno centro in un estremo di un segmento e passano per l’altro estremo del segmento.