首页 > 其他分享 >已知两点坐标及角度获取圆心

已知两点坐标及角度获取圆心

时间:2023-07-13 10:55:53浏览次数:35  
标签:double mid y1 圆心 坐标 两点 x2 x1 verticle

方法一:
`
///


/// 获取逆时针圆心坐标
///

///
///
///
///
///
///
///
private void CalcCenter(double x1, double y1, double x2, double y2, double theta, out double cx, out double cy)
{
cx = 0;
cy = 0;
if (theta == 0)
{
throw new ArgumentException("thera must not be 0");
}

        double t = Math.PI * theta / 180.0;
        double sinT = Math.Sin(t);
        double cosT = Math.Cos(t);
        double temp = 0.5 / (1.0 - cosT);

        cx = (x1 + x2) * 0.5 + sinT * (y1 - y2) * temp;
        cy = (y1 + y2) * 0.5 + sinT * (x2 - x1) * temp;
    }`

方法二:
`
private bool Circle_Center(double x1, double y1, double x2, double y2, double theta, bool isNeg, out double cx, out double cy)
{
cx = 0;
cy = 0;
double dDistance = Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
double dRadius = dDistance * 0.5 / Math.Sin(Math.PI / 180 * theta * 0.5);
if (dDistance == 0.0)
{
// cout << "\n输入了相同的点!\n";
return false;
}
if ((2 * dRadius) < dDistance)
{
// cout << "\n两点间距离大于直径!\n";
return false;
}

        double k = 0.0, k_verticle = 0.0;
        double mid_x = 0.0, mid_y = 0.0;
        double a = 1.0;
        double b = 1.0;
        double c = 1.0;
        k = (y2 - y1) / (x2 - x1);
        double cx1, cy1, cx2, cy2;
        if (k == 0)
        {
            cx1 = (x1 + x2) / 2.0;
            cx2 = (x1 + x2) / 2.0;
            cy1 = y1 + Math.Sqrt(dRadius * dRadius - (x1 - x2) * (x1 - x2) / 4.0);
            cy2 = y2 - Math.Sqrt(dRadius * dRadius - (x1 - x2) * (x1 - x2) / 4.0);
        }
        else
        {
            k_verticle = -1.0 / k;
            mid_x = (x1 + x2) / 2.0;
            mid_y = (y1 + y2) / 2.0;
            a = 1.0 + k_verticle * k_verticle;
            b = -2 * mid_x - k_verticle * k_verticle * (x1 + x2);
            c = mid_x * mid_x + k_verticle * k_verticle * (x1 + x2) * (x1 + x2) / 4.0 -
                (dRadius * dRadius - ((mid_x - x1) * (mid_x - x1) + (mid_y - y1) * (mid_y - y1)));

            cx1 = (-1.0 * b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
            cx2 = (-1.0 * b - Math.Sqrt(b * b - 4 * a * c)) / (2 * a);
            cy1 = Y_Coordinates(mid_x, mid_y, k_verticle, cx1);
            cy2 = Y_Coordinates(mid_x, mid_y, k_verticle, cx2);
        }
        //cx2,cy2为顺时针圆心坐标,cx1,cy1为逆时针圆心坐标

        if (isNeg)
        {
            cx = cx1;
            cy = cy1;
        }
        else
        {
            cx = cx2;
            cy = cy2;
        }
       
        return true;
    }
    private double Y_Coordinates(double x, double y, double k, double x0)
    {
        return k * x0 - k * x + y;
    }

`

标签:double,mid,y1,圆心,坐标,两点,x2,x1,verticle
From: https://www.cnblogs.com/diena/p/17549788.html

相关文章

  • 【Python&RS】基于GDAL给无人机图片定义坐标系
    ​    前段时间有过一个想法,就是如果可以给无人机拍摄的图片定义坐标系,再使用GADL库里的镶嵌拼接函数,是不是就可以实现快速拼接影像。虽然结果不是正射影像,但效率比无人机厂家的软件提高了很多很多,主要还是看用途。    有了这个想法后就要行动起来,定义一个坐标......
  • HJ17 坐标移动
    1.题目读题HJ17 坐标移动  考查点 2.解法思路 代码逻辑 具体实现 publicclassHJ017{publicstaticList<String>directs=Arrays.asList("A","D","W","S");publicstaticvoidmain(String[]args){Scan......
  • QPainter的坐标变换
    QTQPainter坐标系统和坐标变换_qpainter的translate函数_木士易的博客-CSDN博客......
  • ABC_DQ:基于MATLAB/Simulink的三相静止坐标系到两相静止坐标系(Clark变换)到两相旋转坐标
    ABC_DQ:基于MATLAB/Simulink的三相静止坐标系到两相静止坐标系(Clark变换)到两相旋转坐标系变换(Park变换)的仿真模型。仿真条件:MATLAB/SimulinkR2015bID:2720651503371560......
  • c++_ 贪吃蛇_蛇尾坐标记录问题
    c++_贪吃蛇_蛇尾坐标记录问题思路:利用双指针,把蛇尾的状态数组向后移动1位。intprevX=tailX[0];intprevY=tailY[0];//之前的蛇头坐标给prevX,prevYintprev2X,prev2Y;tailX[0]=x;tailY[0]=y;//更新蛇头坐标for(inti=1;i<nTail;i++)......
  • 解决火星坐标系转成WGS-84坐标Python的具体操作步骤
    火星坐标系转换为WGS-84坐标系作为一名经验丰富的开发者,我很高兴能帮助你学习如何将火星坐标系(GCJ-02)转换为WGS-84坐标系的方法。火星坐标系是中国特有的一种坐标系,而WGS-84坐标系是全球通用的坐标系。整体流程下面是整个转换过程的步骤:步骤描述1获取火星坐标系的经......
  • 那些神奇的转化到坐标或网格上的题目
    [AGC002E]CandyPiles[AGC015E]Mr.AokiIncubator......
  • 台风最新坐标轨迹
    台风,台风范围,台风轨迹,台风坐标轨迹,台风运动轨迹一、接口介绍可查询当前存在威胁的台风列表,每个台风的历史坐标位置、风向、风力、风速、气压等,可形成一条完整的台风运动轨迹数据线。二、接入点功能当前台风列表接入点说明:获取当前的台风列表及其基本数据。接口地址:http[......
  • 2023年7月最新全国省市区县和乡镇街道行政区划矢量边界坐标经纬度地图数据 shp geojso
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • 【JAVA】JAVA后台调用百度地图API进行坐标转换
    importcom.alibaba.fastjson.*import……//coords:'114.21892734521,29.575429778924'//return:['114.2307519546763','29.57908428837437']//可以传入多个点,详见https://lbsyun.baidu.com/faq/api?title=webapi/guide/changeposition-base#......