Topic: Python Cerchio per 3 punti  (Letto 163 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline achilledue_DD

  • python unicellularis
  • *
  • Post: 1
  • Punti reputazione: 0
    • Mostra profilo
Python Cerchio per 3 punti
« il: Giugno 16, 2018, 21:11 »
Ciao a tutti

non so se è questa la sezione più consona al mio interrogativo.
Sono poco esperto in programmazione e devo calcolare raggio  centro di un cerchio passante per 3 punti.
Esiste qualcosa di già disponibile in Python per questo calcolo?

Grazie in anticipo

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.854
  • Punti reputazione: 9
    • Mostra profilo
Re:Python Cerchio per 3 punti
« Risposta #1 il: Giugno 16, 2018, 21:48 »
Conosci la formula algebrica? Se la conosci, puoi scrivere una funzione python che implementa quella formula.
Per esempio, questa è la funzione che calcola l'area di un rettangolo a partire dalla misura della base e dalla misura dell'altezza:

def rect_area(l, w):
    # l: base, w: altezza
    area = l*w
    return area


Quindi, se conosci la formula, potresti scrivere una funzione più o meno fatta così:


def circle_area(x1, y1, x2, y2, x3, y3):
    # x1, x2: coordinate primo punto, x2, y2: del secondo, x3, y3: del terzo
    # area = calcolo... calcolo....
    return area


Sicuramente da qualche parte ci sarà una libreria di funzioni algebriche che fa questo per te, ma di certo non nella libreria standard, e del resto è un compito così semplice che si fai prima a scriverla che a installare la libreria.

Offline Legs

  • python unicellularis
  • *
  • Post: 34
  • Punti reputazione: 0
    • Mostra profilo
Re:Python Cerchio per 3 punti
« Risposta #2 il: Giugno 22, 2018, 08:54 »
Ciao a tutti

non so se è questa la sezione più consona al mio interrogativo.
Sono poco esperto in programmazione e devo calcolare raggio  centro di un cerchio passante per 3 punti.
Esiste qualcosa di già disponibile in Python per questo calcolo?

Grazie in anticipo

Non mi sembra che ci sia una qualche funzione in Numpy o Scipy per farlo. Puoi però sfruttare la capacità di Python di usare i numeri complessi.
Io ho trovato in rete questa soluzione:
x, y, z = 0+1j, 1+0j, 0-1j
w = (z-x) / (y-x)
c = (x-y)*(w-abs(w)**2)/2j/w.imag-x

print(-c.real, -c.imag, abs(c+x))

Trovi qui la pagina:
https://stackoverflow.com/questions/28910718/give-3-points-and-a-plot-circle

Comunque se fai una ricerca con python e 3 points circle ti viene fuori il mondo. E' un problema trito e ritrito.
Volendo potresti trovare le coordinate del punto (in campo reale stavolta) come intersezione delle rette mediane ed ortogonali dei segmenti ottenuti unendo i 3 punti per cui deve passare il cerchio. Ci vuole qualche passaggio in più. Di Python potresti sfruttare Sympy per lo svolgimento dei passaggi.
Altra soluzione è quella in cui imponi il passaggio della circoferenza scrivendo le tre equazioni da risolvere come sistema (non lineare). Anche qui Python dovrebbe venirti in aiuto con Numpy.
Ma onestamente non mi sembra che ci sia niente di meglio della soluzione in campo complesso.