平面三角形外接圆圆心与半径求解算法
1. 直角三角形的外心(即三边垂直平分线交点)在斜边的中点上,因此直角三角形的外接圆半径就等于斜边的一半
2. 求外接圆半径
三角形三边为 a、b、c
半周长 p=(a+b+c)/2
三角形面积 S=√[p(p-a)(p-b)(p-c)] (海伦公式)
内切圆半径 r = S/p
=√[(p-a)(p-b)(p-c)/p]
= ½√[(-a+b+c)(a-b+c)(a+b-c)/(a+b+c)]
外接圆半径 R= abc/(4S)
= ¼ abc/√[p(p-a)(p-b)(p-c)]
= abc/√[(a+b+c)(-a+b+c)(a-b+c)(a+b-c)]
R、r、S 关系
rR = S/p * abc/(4S) = abc/[2(a+b+c)]
3. 求外接圆圆心
三维矩阵行列式:
4. 实现代码(C++)
/**
处理:如三点共线,则返回false;否则,返回true,并将计算得到的圆心与半径存放在center和radius众返回。
*/
bool triangleCircle(const Point& p1,const Point& p2,const Point& p3,Point ¢er,double &radius)
{//检查三点是否共线if( isThreePointsOnOneLine(p1,p2,p3) )return false;double x1,x2,x3,y1,y2,y3;x1 = p1.x; x2 = p2.x;x3 = p3.x;y1 = p1.y;y2 = p2.y;y3 = p3.y;//求外接圆半径double a=sqrt( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) );double b=sqrt( (x1-x3)*(x1-x3)+(y1-y3)*(y1-y3) );double c=sqrt( (x2-x3)*(x2-x3)+(y2-y3)*(y2-y3) );double p=(a+b+c)/2;double S=sqrt( p*(p-a)*(p-b)*(p-c) );radius=a*b*c/(4*S);//求外接圆圆心double t1=x1*x1+y1*y1;double t2=x2*x2+y2*y2;double t3=x3*x3+y3*y3;double temp=x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2;double x=(t2*y3+t1*y2+t3*y1-t2*y1-t3*y2-t1*y3)/temp/2;double y=(t3*x2+t2*x1+t1*x3-t1*x2-t2*x3-t3*x1)/temp/2;center.x = x ;center.y = y ;return true;
}
/**
判断3个点是否共线
*/
bool isThreePointsOnOneLine(const Point& p1,const Point& p2,const Point& p3){if(p2.x==p1.x){if(p2.x==p3.x)return true;return false;}else{if(p2.x==p3.x)return true;}//判断依据:p2与p1两点构成直线的斜率=p2与p3两点构成直线的斜率double k1=(p2.y-p1.y)/(p2.x-p1.x);double k2=(p3.y-p2.y)/(p3.x-p2.x);double DIFF=0.00000001;if( fabs(k1-k2)<DIFF )return true;return false;
}
参考资料:
1. 三角形外接圆半径公式:http://zhidao.baidu.com/link?url=1WKM_z0Vfaejav_OnjsiSJtFf1LFyEKPaS4EPswqkd5xBbCAAJzNZNn3qwVpS_XymmetcTDhCQ4HRShVXEjDI_
2. 三角形外接圆圆心公式:http://zhidao.baidu.com/link?url=-3KVP3Gi5Nqs6gEb_gYt1TfWSDhcI13Etsd8xeMorWiQ64x7v8HMapIU-pVx7GHjIPZbHvfQejx3uGDnmi6UI_
平面三角形外接圆圆心与半径求解算法相关推荐
- 求三角形的外接圆圆心个半径
做华南师范大学校赛初赛的一道计算几何题,无聊暴力推公式. #include<stdio.h> #include<string.h> #include<math.h> ...
- 算法笔记4.5.2二分扩展:凸多边形的外接圆之最大半径
算法笔记4.5.2二分扩展:凸多边形的外接圆之最大半径 二分法求外接圆最大半径 题目描述 思路: 代码如下 二分法求外接圆最大半径 题目描述 给出N个线段长度,试将它们头尾相接组合成一个凸多边形,使凸 ...
- MATLAB实现利用三个不共线的点绘制圆(包括圆心和半径的求解)
通过三个不共线的平面点绘制圆形/MATLAB实现 1: 三个不共线的点求解圆心和半径 假设三个不共线的点的坐标分别为P1(x1,y1).P2(x2,y2)P1(x1,y1).P2(x2,y2)P1(x ...
- C++求解圆心、半径、直线与圆交点
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C++求解圆心.半径.直线与圆交点 前言 一.检测对象 二.检测方法 1.检测圆心和半径 2.求解直线与圆的交点 3.计算圆环残缺比例 ...
- c++ 圆上任意点坐标计算_已知圆上任意三点坐标如何编程来计算这个圆的圆心和半径...
在过去的一周时间里一直在计算师兄交代的任务 ,啥都没学,就一直在干这活.其中呢,我想的一个算法中就用到了本文中的这个小知识(主要就是线性代数和高中的一些知识结合起来).师兄说做的这个东西的内容要保密, ...
- java求外接圆圆心_吉软_Java_第六次作业
编写一个圆类Circle 要求: 1. 该类拥有两个属性: 1) Point p代表圆心 2) float radius代表半径 2. 构造方法 1) Circle() 2) Circle(Point ...
- OpenCV检测圆并求出圆心与半径
对自己的项目有一个简单的想法,想先用OpenCV检测出图片中的圆,并找到圆心与半径.以前从别人的博客学习了很多,现在也把我的一个简单代码贴在下面,并注释.希望能给各位有一点点帮助. int main( ...
- 三维重建(8)之三维空间点集拟合圆,获取圆心及半径
三维重建之三维空间点集拟合圆,获取圆心及半径 给定任意一组三维空间点,通过拟合运算得到圆的圆心和半径,matlab仿真效果如下: 1. 拟合原理 首先,所有离散点尽可能在一个平面上,平面方程可表示为 ...
- 最小二乘法拟合圆心与半径
公众号"轻松玩转机器人",欢迎关注. 1.算法介绍 最小二乘法的目的,通俗来说,就是拟合变量之间的关系. 由于现实世界观测的变量存在噪声,找不到完美.不存在误差的关系,因此我们退而 ...
- 技术图文:排序技术在求解算法题中的应用
背景 前段时间,在知识星球立了一个Flag,这是总结Leetcode刷题的第五篇图文. 理论部分 C# 中的排序 对集合类的排序,我们通常使用位于 System.Core 程序集,System.Lin ...
最新文章
- codeforces 293E Close Vertices 点分治+滑窗+treap
- 读服务器文件,读取服务器文件
- C# 工厂模式 简单入门
- python websocket server_用Python实现一个简单的WebSocket服务器
- yum groupinstall “Development Tools“查看其软件列表
- 糟糕程序员的20个坏习惯
- 93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?
- (转)淘淘商城系列——maven工程debug调试
- 协同过滤算法_基于用户的协同过滤推荐算法原理和实现
- C++_类和对象_对象特性_成员变量占用对象内存_成员函数_静态成员函数_静态变量_都不占用对象内存_他们是分开存储的---C++语言工作笔记048
- 【网络信息安全】授权与访问控制
- 20篇聊天机器人领域必读论文速递!
- ubuntu install wiznote
- OSChina 周六乱弹 ——你打算怎么和老妈解释
- 《阴阳师》RPG游戏体验报告
- data backup vs archiving
- keep-alive的作用是什么? 使用它的目的是什么?
- 有什么提升技术能力的网站
- Docker-Windows安装、升级、卸载
- Java用Jsoup开发爬虫获取双色球开奖信息