中文背景:

给定两个点坐标分别为(x1, y1), (x2, y2)和半径r,求出圆心的坐标(a, b)。

英文背景:

Given the coordinates of two points (x1, y1), (x2, y2) and radius r, find the coordinates of the center of the circle (a, b).

解法:

我们在高中学过圆的标准方程,圆心坐标为(a, b),半径为r。

当两点间的距离大于2r的时候,无法形成圆,

当两点间的距离等于2r的时候,可以形成一个圆,

当两点间的距离小于2r的时候,可以形成两个对称圆。

我们首先讨论可以形成两个圆的情况:

此时两点间的距离小于两倍的半径,

因此由题目中给出的条件,我们可以列出以下方程:

展开以后我们可以得到

我们将两式相减,可以得到

此时进行分类讨论,

当 x1 = x2 时:

我们可以想象得到,此时两点同时位于一条与y轴平行的线上,我们可以直接得到圆心的y坐标,即b = (y1 + y2) / 2,然后我们计算圆心的x坐标,如图。

由此我们可以计算出a的坐标

即圆心坐标为

HINT:

当x1 = x2 且y1 = y2时,两点重合,能组成无数的圆,

但是该算法只返回两点重合处正左方和正右方的一组对称圆

当 x1 ≠ x2 时:

然后我们可以得到a的表达式为

此时我们假设, 

那么我们可以将a的表达式化简为

然后我们把a代入到中,展开并化简后可以得到一个关于b的一元二次方程,即  

将其转化为一般一元二次方程的形式,即,那么

可以解得圆心的y坐标

即圆心坐标为

只能组成一个圆时:

此时两点间的距离等于两倍的半径,

和能组成两个圆的情况一样,只是组成的两个圆重合在一起

无需多加讨论

无法组成圆时:

此时两点间的距离大于两倍的半径,

遇到这种情况,可以先判断两点间的距离,然后直接跳过即可

源代码

// Declare a point on the Euclidean plane.
typedef struct _point
{double x;double y;
}Point;Point TwoPointsCircleCenter(Point a, Point b, double r, int option)
{/*** If two points and a radius can form a circle,* then they can form a pair of symmetric circles.* Thus, I use 'option' to indicate which circle to return.*/Point center;if(a.x <= b.x + eps && a.x >= b.x - eps)// a.x == b.x in double format{center.y = (a.y + b.y) / 2.0;if(option == 0){center.x = a.x - sqrt(r * r - (a.y - b.y) * (a.y - b.y) / 4.0);}else{center.x = a.x + sqrt(r * r - (a.y - b.y) * (a.y - b.y) / 4.0);}return center;}double c1 = (b.x * b.x - a.x * a.x + b.y * b.y - a.y * a.y) / (2 * (b.x - a.x));  double c2 = (b.y - a.y) / (b.x - a.x);double A = (c2 * c2 + 1);  double B = (2 * a.x * c2 - 2 * c1 * c2 - 2 * a.y);  double C = a.x * a.x - 2 * a.x * c1 + c1 * c1 + a.y * a.y - r * r;  if(option == 0){center.y = (-B - sqrt(B * B - 4 * A * C)) / (2 * A);}else{center.y = (-B + sqrt(B * B - 4 * A * C)) / (2 * A);}center.x = c1 - c2 * center.y;return center;
}

Reference:

对某不知名大佬的博客进行了完善和补充

高中数学必修课本

给定两个点的坐标和一个半径,求能组成的圆的圆心坐标相关推荐

  1. c语言在平面直角坐标系中,给定一个圆的圆心坐标Ox,Oy以及半径R,在再给定一个点的坐标PX,Py,请判断这个点与圆的位置关系。

    在平面直角坐标系中,给定一个圆的圆心坐标Ox,Oy以及半径R,在再给定一个点的坐标PX,Py,请判断这个点与圆的位置关系. 输入格式: 先输入三个正整数,分别代表圆心的横纵坐标x,Oy和半径R. 在输 ...

  2. 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串...

    1 /* 2 * 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串,其实也就是变位词问题 3 * 比如说 a='abc' b='acb'是可以通过a变成b的 4 * 思路; 5 ...

  3. matlab 经纬度插值,给定两个经纬度,以及插值n,求出中间n个经纬度的值

    满意答案 在科技工程中,除了要进行一定的理论分析外,通过实验.观测数据,做分析.处 理也是必不可少的一种途径.由于实验测定实际系统的数据具有一定的代表性,因此在处理 时必须充分利用这些信息:又由于测定 ...

  4. A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效(牛客网)

    #include<iostream> using namespace std; /* 1)先使用快速排序,使得两个数组有序: 2)然后利用二分查找的方法,在数组B中查找: 3)其中,注意在 ...

  5. html5圆心坐标,圆心坐标的提取

    用OpenCV的话,这样的活儿也就那么两三行代码,而且灵活可靠.但是,玩图像处理只懂玩成这样就悲哀了,就如同游戏引擎之于计算机图形学,太依赖图像库是不利于自己的成长和知识的提升的~--ZwqXin.c ...

  6. [计算几何] 圆与圆的交点坐标

    给出两圆的圆心坐标和半径, 求出两圆交点的坐标 如下图 可根据余弦定理求出角a的大小, 再根据函数atan2()可求出向量C1C2的方位角t 这样一来, 我们所求的交点就是以圆心C1.c为起点, 大小 ...

  7. 采用成员函数和友元函数计算给定两个坐标点之间的距离

    设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离 ...

  8. 给定两个数组arrx和arry,长度都为N。代表二维平面上有N个点,第i个点的x 坐标和y坐标分别为arrx[i]和arry[i],返回求一条直线最多能穿过多少个点?

    问题描述: 给定两个数组arrx和arry,长度都为N.代表二维平面上有N个点,第i个点的x 坐标和y坐标分别为arrx[i]和arry[i],返回求一条直线最多能穿过多少个点? 思想 坐标系中两个点 ...

  9. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。...

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...

最新文章

  1. 独家 | 国内AI专业高考报考指南
  2. using namspace std的使用
  3. 财富第三极人类社会运行模型(附路线图)
  4. 网和aoe网的区别_欧哲门窗的金刚网和其他品牌的有什么区别?
  5. 【Linux基础】crontab定时命令详解
  6. 数据结构 - 多路搜索树(2-3树、b树、b+树、b*树)
  7. 内容管理系统测试实战
  8. 高性能MySQL概述
  9. quartusII实验报告
  10. 正式版TBSA 6.0(用来分析多层及高层建筑结构的专用程序)
  11. 又发现几个有意思的网站
  12. 怎样做项目计划(转载)
  13. 王二 设计模式读书笔记
  14. 逗比老师带你搞定C语言指针
  15. Python 库pyautogui 0.9.52的下载、安装和使用
  16. 分布式系统的CAP原理及其应用
  17. 老板们这些股权结构需要优化了
  18. 创新实训(2)-Scrapy 学习
  19. 将html文件和css文件连接起来的方法
  20. mysql索引对查询效率的影响

热门文章

  1. SpringBoot Jar包改造为War包
  2. 农产品电子商务运营应该怎么做?
  3. html禁用TAB按键
  4. 语音交互:4G之上的智能手机革命
  5. VIVO手机桌面ICON替换失败记录
  6. 小米 max android,吃派啦!小米 Max 3 本月发布 Android P 更新
  7. 10、门禁系统安装与调试知识大全
  8. 使用kt-connetct实现k8s网络互通
  9. 群雄逐鹿 互联网家装市场烽烟四起
  10. 【每日早报】2019/07/25