圆和直线交点,c代码实现

#include <stdio.h>
#include <math.h>

int main() {
    double Cx, Cy, R; // 圆的参数
    double A, B, C;   // 直线的参数
    double m, b;     // 直线的斜率和截距
    double x1, y1, x2, y2; // 交点坐标

    // 输入圆的参数
    printf("Enter the center coordinates of the circle (Cx Cy): ");
    scanf("%lf %lf", &Cx, &Cy);
    printf("Enter the radius of the circle (R): ");
    scanf("%lf", &R);

    // 输入直线的参数
    printf("Enter the coefficients of the line (A B C): ");
    scanf("%lf %lf %lf", &A, &B, &C);

    // 计算直线的斜率和截距
    m = -A / B;
    b = -C / B;

    // 计算交点坐标
    double discriminant = R * R * (1 + m * m) - pow(b - Cy, 2);

    if (discriminant < 0) {
        printf("No real intersection points.\n");
    } else {
        x1 = (-m * b + sqrt(discriminant)) / (1 + m * m);
        y1 = m * x1 + b;

        x2 = (-m * b - sqrt(discriminant)) / (1 + m * m);
        y2 = m * x2 + b;

        printf("Intersection Point 1: (%lf, %lf)\n", x1, y1);
        printf("Intersection Point 2: (%lf, %lf)\n", x2, y2);
    }

    return 0;
}
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设直线方程为 $ax+by+c=0$,的方程为 $(x-x_0)^2+(y-y_0)^2=r^2$,其中 $(x_0, y_0)$ 为心坐标,$r$ 为半径。 求解直线交点,即要求解方程组: $$\begin{cases}ax+by+c=0\\(x-x_0)^2+(y-y_0)^2=r^2\end{cases}$$ 将第一个方程代入第二个方程,得到: $$(x-x_0)^2+(y-y_0)^2=r^2\Rightarrow (x-x_0)^2+[\frac{-a}{b}(x-x_0)-\frac{c}{b}-y_0]^2=r^2$$ 将上式展开并化简,得到: $$(1+\frac{a^2}{b^2})(x-x_0)^2 + 2\frac{ac}{b^2}(x-x_0)+(\frac{c^2}{b^2}+y_0^2-r^2)=0$$ 这是一个二次方程,可以使用根公式求解。如果判别式 $b^2-4ac<0$,则说明直线没有交点;如果 $b^2-4ac=0$,则说明直线相切,有一个交点;如果 $b^2-4ac>0$,则说明直线相交,有两个交点。 下面是 Python 代码实现: ```python import math def line_circle_intersection(a, b, c, x0, y0, r): # 计算二次方程的系数 A = 1 + a**2 / b**2 B = 2 * a * c / b**2 - 2 * x0 C = x0**2 + (c/b - y0)**2 - r**2 # 计算判别式 delta = B**2 - 4*A*C if delta < 0: # 直线没有交点 return [] elif delta == 0: # 直线相切,有一个交点 x = -B / (2*A) y = -a/b * x - c/b return [(x, y)] else: # 直线相交,有两个交点 x1 = (-B + math.sqrt(delta)) / (2*A) y1 = -a/b * x1 - c/b x2 = (-B - math.sqrt(delta)) / (2*A) y2 = -a/b * x2 - c/b return [(x1, y1), (x2, y2)] ``` 其中,`a, b, c` 分别为直线方程的系数,`x0, y0, r` 分别为的参数。函数返回一个列表,包含所有交点的坐标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值