Ciao Afazio
non mi sembra difficile da risolvere il problema evidenziato in rosso, se ragioni intermini di distanze dal centro. Se la distanza del nodo i della polilinea è < del raggio e se la distanza del nodo i+1 è > (ovvero se accade il contrario) significa che il segmento della polilinea interseca il cerchio, o sbaglio? Dovrebbe essere abbastanza semplice il codice da scrivere. Ciao.
In ogni caso mi hai dato una idea. vediamo se puo portare alla soluzione.
Ipotizziamo per adesso che non ricorra il caso che pur essendo gli estremi entrambi esterni il segmento che li unisce non intersechi il cerchio. Cioè mettiamoci nel caso in cui i due vertici siano uno interno ed uno esterno
In questa situazione vi sarà certamente un punto di intersezione tra il segmento superiore del concio e il cerchio
Trattasi di determinare proprio questo punto e poi sostutire, prima del calcolo dell'area, al valore di (xi;yi) (o di xf a seconda del caso) proprio le coordinate (x;y) del punto di intesezione.

inizio pertanto col determinare le due distanze di e df
di=radq[ (xc-xi)² + (yc-yi)² ]
df=radq[ (xc-xf)² + (yc-yf)² ]
nel caso in cui si abbia:
di>R e df<R , che e' il caso della figura, fisso un punto generico (x;y) interno al segmento superiore del concio e mi determino la distanza d
d=radq[ (xc-x)² + (yc-y)² ]
e confronto questa distanza col raggio. Variero il punto (x;y) finche non ottengo l'uguaglianza
radq[ (xc-x)² + (yc-y)² ] =R
la coppia (x;y) che soddisfa la precedente equazione e' quella del punto di intersezione.
Posso procedere secondo il metodo della bisezione:
- scelgo il punto medio del segmento superiroe del concio:
x= (xf-xi)/2
Y= (yf-yi)/2
determino d e la cofronto con R. Se d e' maggiore di R, allora fisso come punto iniziale del tratto superiore il punto medio precedente e procedo nuovamente seguendo la procedura, se invece e' minore del raggio, allora fisso come estremo finale il punto medio e procedo con la successiva bisezione.
Ovviamente occorrerà fissare una tolleranza quindi il confronte sarà in base alla:
if radq[ (xc-x)² + (yc-y)² ] - R < epsilon
oppure nel caso inverso
if radq[ (xc-x)² + (yc-y)² ] - R > epsilon
alla fine avrò ottenuto le coordinate del punto di intersezione e gli estremi della parte superiore del concio che ricadono uno sul cerchio e l'altro all'interno.