Solo añadir un aporte:
Una recta no sólo se puede representar con el punto origen y el punto final.
La ecuación de una recta viene dada por a*x+b*y+c=0. Luego una recta la
puedes guardar con una terna <a,b,c> (mi recomendación personal es que
uses b=0.0 para verticales, y para el resto uses b=1.0 variando a y c para que
sigan el convenio).
struct recta{
float a,b,c;
};
De igual manera, una circunferencia viene dada por (x-e)^2+(y-f)^2=r^2,
donde <e,f> es el centro y r el radio.
struct circle{
float e, f, r;
}
De esta manera, si quieres calcular el punto de corte entre una recta y una circunferencia,
sólo tienes que resolver un sistema de ecuaciones (ten en cuenta que te saldrán dos
soluciones)
Un saludo!