per determinare i punti di intersezione ho seguito il metodo che mi ha suggerito Alberto
L'equazione del cerchio si puo scrivere come
x² + y² + A*x + B*y + C = 0
con:
A=-2*xc
B=-2*yc
C=xc²+yc² - R²
L'equazione passante per (xi;yi) e per (xf,yf) si scrive;
y = m*x + n
con
m=(yf-yi)/(xf-xi)
n= yi - m*xi
e qui c'e' la prima fonte di errore, nel caso di segmento verticale abbiamo divisione per zero. Occorrerà apportare questo controllo e procedere con l'intersezione di un cerchio con la retta x=xi
Sostituendo nell'equazione del cerchio il valore (mx+n) otteniamo l'equazione dis econdo grado dei memorabili tempi del liceo:
a1*x² + b1*x +c1 = 0
con
a1 = m²+1
b1= 2*m*n + A +m*B
c1= n ² + B * n + C
Si determina il discriminante e se e' maggiore di zero vi sono le due intersezioni con la retta su cui giace il generico segmento della polilinea.
Il caso di discriminante nullo non mi interessa, poichè un segmento tangente al cerchio non partecipa nell'equilibrio del pendio dato che sarebbe nullo l'apporto di area di concio
Ma il fatto che vi siano due intersezione della retta su cui giace il segmento col cerchio, non significa affatto che necessariamente il segmento interseca il cerchio.
Occorre capire la posizione reciproca tra gli estremi del segemento e i due punti di intersezione
pertanto, indicand o con x1 ed x2 rispettivamente le ascisse del primo e del secondo punto di intersezione, abbiamo i seguenti casi:
- se (xf < x1 Or xi > x2) - non vi sono intersezioni poiche il segmento e' o tutto a sinistra del cerchio o tutto a destra
- se xi <= x1 And xf < x2 - vi e' una sola intersezione. Il segmento ha il primo estremo a sinistra del cerchio (o sul cerchio stesso) mentre il secondo si trova dentro il cerchio. il punto i intersezione è proprio x1
- se xi <= x1 And xf >= x2 vi sono due intersezioni in quanto il primo estremo del segemento si trova a sinistra del cerchio (oppure sul cerchio stesso) ed il secondo estremo si trova a destra del cerchio (oppure sul cerchio). Entrambi i punti, x1 ed x2 sono punti di intersezione
- se xi > x1 And xf < x2, non vi sono intersezioni poiche il segmento e' tutto interno al cerchio
- se xi > x1 And xf >= x2, vi e' una sola intersezione in quanto ilprimo estremo del segmento e' dentro il cerchio mentre il secondo è o sul cerchio oppure fuori dal cerchio a destra. Il punto i intersezione è proprio x2