Costruzioni geometriche

Come usare intersezioni tra oggetti.

Lo strumento base della geometria greca era lo spago:

  • tenendo teso un pezzo di corda si poteva rappresentare un segmento allungabile a piacere;
  • tenendo fisso un estremo e facendo ruotare l’altro, si poteva rappresentare una circonferenza.

Con questo strumento hanno costruito la geometria euclidea e risolto innumerevoli problemi.

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.
  • Polygon((punto0, punto1, punto2, ...)) crea un poligono dati i vertici. tra due oggetti.

Problema

Crea un piano e disegna:

  • nel primo quadrante: due punti e il triangolo equilatero costruito su quei due punti;
  • nel secondo quadrante: un segmento e l’asse di quel segmento;
  • nel terzo quadrante: un angolo e la bisettrice di quell’angolo;
  • nel quarto quadrante: due punti e il quadrato costruito su quei due punti.

Soluzione guidata

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

  2. Scrivi un’intestazione adeguata.

  3. Scrivi lo scheletro del programma.

  4. Ora scriviamo dei commenti che indicano come intendiamo risolvere il problema:

    # Disegno tre punti disposti accuratamente
    # Disegno il poligono che passa per i tre punti
    
  5. Risolviamo la prima parte del problema ottenendo un programma principale simile a questo:

    # programma principale
    ip = ig.InteractivePlane()
    
    # Disegno tre punti disposti accuratamente
    p_0 = ig.Point(1, 2, width=6)
    p_1 = ig.Point(11, 2, width=6)
    p_2 = ig.Point(6, 10.66, width=6)
    # Disegno il poligono che passa per i tre punti
    triequi = ig.Polygon((p_0, p_1, p_2),
                         width=5, color='green', intcolor='gold')
    

    Osservate che il costruttore di Poligon vuole un primo argomento formato da una sequenza di punti per cui i vertici del poligono devono essere racchiusi tra parentesi.

  6. Proviamo il programma e controlliamo che rispetti le specifiche richieste dal problema. Cosa succede quando muovo i punti base?

    Accidenti, il triangolo è equilatero all’inizio, ma non lo è più quando sposto uno dei punti base.

    Dobbiamo affrontare il problema in un altro modo. Il terzo vertice va costruito partendo dai primi due:

    # Disegno due punti in una posizione qualunque
    # Disegno le due circonferenze che hanno centro in un punto e
    # passano per l'altro
    # Trovo un'intersezione delle due circonferenze
    # Disegno il poligono che ha per vertici i due punti e l'intersezione
    
  7. Dovremmo ottenere un programma che assomiglia a questo:

    # programma principale
    ip = ig.InteractivePlane()
    
    # Disegno due punti in una posizione qualunque
    p_0 = ig.Point(1, 2, width=6)
    p_1 = ig.Point(11, 2, width=6)
    # Disegno le due circonferenze che hanno centro in un punto e
    # passano per l'altro
    c_0 = ig.Circle(p_0, p_1, width=1)
    c_1 = ig.Circle(p_1, p_0, width=1)
    # Trovo un'intersezione delle due circonferenze
    p_2 = ig.Intersection(c_0, c_1, +1, width=6)
    # Disegno il poligono che ha per vertici i due punti e l'intersezione
    triequi = ig.Polygon((p_0, p_1, p_2),
                         width=5, color='green', intcolor='gold')
    

    Osservate che è buona norma tenere le linee di costruzione più sottili rispetto alle altre, o addirittura renderle invisibili visible=False.

    Si può osservare che questa volta i punti liberi sono solo due, il terzo vertice è vincolato alla posizione di questi due dalla nostra costruzione. Ora, se muoviamo i punti base il nostro triangolo cambia posizione e dimensioni, ma resta sempre un triangolo equilatero come era richiesto dal problema.

  8. A questo punto cerca su un libro di disegno su internet come risolvere gli altri tre problemi. Risolvili con riga e compasso, poi con pyig. Di seguito riporto le tre tracce di soluzione.

  9. Asse di un segmento:

    # Disegno due punti
    # Disegno il segmento
    # Disegno le due circ. che hanno centro in un estremo e passano per l'altro
    # Chiamo i_0 e i_1 le due intersezioni delle circonferenze
    # L'asse è la retta passante per i_0 e i_1
    
  10. Bisettrice di un angolo:

    # Disegno tre punti: p_0, vertice, p_1
    # Disegno i due lati dell'angolo: r_0 e r_1
    # Disegno una circ. che ha centro nel vertice e passa per p_0
    # Chiamo i_1 l'intersezione della circonferenze con il lato r_1
    # Disegno le circonferenze di centro p_0 e i_1 passanti per il vertice
    # Chiamo i_2 l'intersezione delle due circonferenze
    # La retta vertice - i_2 è la bisettrice cercata
    
  11. Quadrato dati due vertici consecutivi:

    # Disegno due punti: p_0, p_1
    # c_0 è la circ. che ha centro in p_0 e passa per p_1
    # c_1 è la circ. che ha centro in p_1 e passa per p_0
    # i_0 è l'intersezione di queste due circonferenze c_0 e c_1
    # c_2 è la circ. che ha centro in i_0 e passa per p_0
    # i_1 è l'intersezione delle circonferenze c_0 e c_2
    # c_3 è la circonferenza di centro i_1 passante per p_0
    # i_2 è l'intersezione delle circonferenze c_3 e c_2
    # r_0 è la retta passante per p_0 e i_2
    # p_3 è l'intersezione della retta r_0 con la circonferenza c_0
    # c_4 è la circonferenza di centro i_3 passante per p_0
    # p_2 è l'intersezione della circonferenza c_4 con la circonferenza c_1
    # Il quadrato cercato e il poligono di vertici: (p_0, p_1, p_2, p_3)
    

    Quando il programma e complicato, come in quest’ultimo caso è importante eseguire il programma ogni volta che si aggiunge un’istruzione in modo da individuare immediatamente eventuali errori sia sintattici sia logici.

  12. Completiamo il programma per risolvere anche la terza parte del problema.

Riassumendo

  • Polygon permette di disegnare un poligono data una sequenza di punti. La sintassi del costruttore di Polygon è:

    Polygon(sequenza di punti [, intcolor=white]
                 [, visible=True] [, color='blue'] [, width=3] [, name=''])
    
  • Per affrontare problemi complicati: prima pianifica la soluzione descrivendola per mezzo di commenti, poi scrivi le istruzioni per risolvere il problema eseguendo il programma ad ogni modifica.

  • Nei libri d disegno, o in internet, si possono trovare molte costruzioni geometriche che si possono realizzare con rette, circonferenze e intersezioni.

Prova tu

  1. Disegna un quadrato dati due vertici opposti.
  2. Disegna un esagono regolare dati due vertici consecutivi.
  3. Disegna un esagono regolare dato il centro e un vertice.
  4. Disegna un pentagono regolare dati due vertici consecutivi.
  5. Disegna un parallelogramma dati tre vertici consecutivi.