zoukankan      html  css  js  c++  java
  • 已知两点坐标和半径,求圆心

    已知圆上的两点坐标和半径,求圆心。

    数学分析:这个题目,涉及到简单的数学问题,但是计算比较繁琐。
    假设已知圆上的两点坐标分别为N(X1,Y1)和M(X2,Y2),半径为R,圆心坐标为o(a,b),根据数学知识可得到:
    (x1-a)^2 + (y1-b)^2 = R^2----(1)式
    (x2-a)^2 + (y2-b)^2 = R^2----(2)式
    分别展开上述两个式子得到
    (x1)^2 - 2*x1*a + a^2 + (y1)^2 - 2*y1*b + b^2 = R^2 ----(3)式
    (x2)^2 - 2*x2*a + a^2 + (y2)^2 - 2*y2*b + b^2 = R^2 ----(4)式
    (3)式 - (4)式
    得到:
    x1^2 - x2^2 + 2*(x2-x1)*a + y1^2 - y2^2 + 2*(y2-y1)*b = 0
    变形得到:
    a = (x2^2 - x1^2 + y2^2 - y1^2)/2/(x2-x1) - (y2-y1)/(x2-x1) * b

    设:C1 = (x2^2 - x1^2 + y2^2 - y1^2)/2/(x2-x1)
    设:C2 = (y2-y1)/(x2-x1)

    a = c1 - c2 * b ----(5)式
    把(5)式代入(1)式,得到;
    x1^2 - 2*x1*(C1-C2*b) + (C1-C2*b)^2 + y1^2 -2*y1*b + b^2 = R^2
    展开简化为关于b的一元二次方程一般形式;
    (C2^2+1)*b^2 + (2*x1*C1-2*C1*C2-2*y1)*b + x1^2-2*x1*C1+C1^2+y1^2-R^2 = 0
    得到求b的方程组
    
    二次项系数:A = (C2^2+1)
    一次项系数:B = (2*x1*C1-2*C1*C2-2*y1)

    常数项: C = x1^2-2*x1*C1+C1^2+y1^2-R^2

    一元二次方程转化为:

    A*b^2 + B*b + C = 0 ----(6)式

    解得b = (-B + sqrt(B*B - 4 * A*C)) / (2 * A); (或b = (-B - sqrt(B*B - 4 * A*C)) / (2 * A))

    代入(5)式得a的值;

     public List<string> GetArcCenter(double x1, double y1, double x2, double y2, double Angle)
            {
                
                double CenterX = 0, CenterY = 0;
                List<string> CenterList = new List<string>();
                double R= Radius(x1, y1, x2, y2, Angle);
                double c1 = (x2 * x2 - x1 * x1 + y2 * y2 - y1 * y1) / (2 * (x2 - x1));
                double c2 = (y2 - y1) / (x2 - x1);  //斜率
                double A = (c2 * c2 + 1);
                double B = (2 * x1 * c2 - 2 * c1 * c2 - 2 * y1);
                double C = x1 * x1 - 2 * x1 * c1 + c1 * c1 + y1 * y1 - R * R;
                CenterY = (-B +Math.Sqrt(B * B - 4 * A * C))/ (2 * A);
                CenterX = c1 - c2 * CenterY;
                
                CenterList.Add(Convert.ToString(CenterX));
                CenterList.Add(Convert.ToString(CenterY));
                return CenterList;
            }
    

      

  • 相关阅读:
    mysql创建用户后无法访问数据库的问题
    mysql索引
    hadoop安装
    MySQL工作原理
    MySQL数据库优化的八种方式
    FLOAT 和 DOUBLE区别
    在C++中定义常量
    C++变量类型
    FTP主动模式、被动模式(转)
    FtpClient ReplyCode 意义及 FtpClientHelper辅助类
  • 原文地址:https://www.cnblogs.com/zhouyuqiu/p/14307013.html
Copyright © 2011-2022 走看看