C#求解圆和圆的交点

本方法的步骤是:

1.判断两个圆是否相交

2.已知两圆的交点连线L1与两圆心连线L2是垂直关系,所以可以得到两圆的交点连线(L1)的斜率

3.通过几何关系求出L1和L2的交点,从而得出L1方程

4.求直线与圆的交点

程序中涉及到的其他静态类方法可以在我的其他博文中找到
public static bool InterC2C(double centerX1, double centerY1, double R1, double centerX2, double centerY2, double R2, out List<double> Rows, out List<double> Columns)
        {
            Rows = new List<double>();
            Columns = new List<double>();
            double dis = DistanceP2P(centerX1, centerY1, centerX2, centerY2);
            bool flag = true;
            List<double> row = new List<double>();
            List<double> col = new List<double>();
            row.Add(centerX1);
            row.Add(centerX2);
            col.Add(centerY1);
            col.Add(centerY2);
            //判断两圆是否相交
            if (dis > R1 + R2)
            {
                flag = false;
            }
            else if (Math.Abs(dis - R1 - R2) < 0.001) //两圆相切的情况
            {
                InterC2S(centerX1, centerY1, R1, row, col, out List<double> resR1, out List<double> resC1);
                InterC2S(centerX2, centerY2, R2, row, col, out List<double> resR2, out List<double> resC2);
            }
            else //两圆相交的情况
            {
                double L = dis;
                double ae = (R1 * R1 - R2 * R2 + L * L) / (2 * L);
                double centerR = centerX1 + ae * (centerX2 - centerX1) / L;
                double centerC = centerY1 + ae * (centerY2 - centerY1) / L;
                GenLineEqu2(centerX1, centerY1, centerX2, centerY2, out double a, out double b, out double c);
                double c2 = a * centerC - b * centerR;
                //圆和直线的交点
                InterC2L(centerX1, centerY1, R1, b, -a, c2, out Rows, out Columns);
            }
            return flag;
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
本程序是两相交求交点,输入信息为两心坐标和半径值。如有更好的算法,欢迎交流!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来超低端科技研究所

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值