/* archivo recta.c */ #include #include void main(void) { double m, c, a, b, r; double a1, b1, c1; double discr; double sol1x, sol2x; double sol1y, sol2y; printf("Intersección de una circunferencia con una recta.\n\n"); printf("Introduzca los datos de la circunferencia:\n"); printf("Centro. Coordenadas x e y: "); scanf("%lf%lf", &a, &b); printf("\nRadio: "); scanf("%lf", &r); printf("\nIntroduzca los datos de la recta:\n"); printf("Pendiente m y ordenada en el origen b: "); scanf("%lf%lf", &m, &c); a1 = 1 + m*m; b1 = 2*m*c - 2*a - 2*m*b; c1 = a*a + c*c + b*b - 2*b*c - r*r; discr = b1*b1 - 4*a1*c1; if (discr > 0.0) { printf("\n\nExisten dos soluciones:\n"); sol1x = (-b1 + sqrt(discr) )/(2*a1); sol2x = (-b1 - sqrt(discr) )/(2*a1); sol1y = m*sol1x + c; sol2y = m*sol2x + c; printf("primer punto:\n%lf %lf\n", sol1x, sol1y); printf("segundo punto:\n%lf %lf\n", sol2x, sol2y); } else if ( discr < 0.0 ) printf("\n\nNo hay solución.\n"); else { printf("\n\nSólo hay una solución:\n"); sol1x = -b1/(2*a1); sol1y = m*sol1x + c; printf("%lf %lf\n", sol1x, sol1y); } }