https://blog.csdn.net/youhuakongzhi/article/details/86474619

https://blog.csdn.net/qq_43572555/article/details/103470968

很简单的推导,以后用的时候就不用浪费时间了,

圆的一般方程为:

三个已知点为(x1,y1)   (x2,y2)  (x3,y3)

则圆心(x,y)和半径r的计算结果为:

需要注意,如果三个点共线,那么这三个点肯定无法形成圆,这一问题可通过上式的A来判定,A=0说明三点共线;

#include <iostream>
#include <math.h>
#include <iomanip>
#include <stdio.h>
using namespace std;
int main()
{//已知三个点确定圆的半径和圆心 double x1,x2,x3,y1,y2,y3,x,y,r,A,B,C,D;cin>>x1>>y1>>x2>>y2>>x3>>y3;A=x1*(y2-y3)-y1*(x2-x3)+x2*y3-x3*y2;B=(x1*x1+y1*y1)*(y3-y2)+(x2*x2+y2*y2)*(y1-y3)+(x3*x3+y3*y3)*(y2-y1);C=(x1*x1+y1*y1)*(x2-x3)+(x2*x2+y2*y2)*(x3-x1)+(x3*x3+y3*y3)*(x1-x2);D=(x1*x1+y1*y1)*(x3*y2-x2*y3)+(x2*x2+y2*y2)*(x1*y3-x3*y1)+(x3*x3+y3*y3)*(x2*y1-x1*y2);x=-B/(2*A);y=-C/(2*A);r=sqrt((B*B+C*C-4*A*D)/(4*A*A));//-1表示圆不存在 if(!A)cout<<"-1"<<endl;elseprintf("%.4lf %.4lf %.4lf\n",x,y,r);return 0;
}

为加快运算速度,避免重复计算,把上面代码中重复计算的部分,提取出来,对于实时图像计算,分秒必争:

void xxxxx()
{float x1,x2,x3,y1,y2,y3,x,y,r,A,B,C,D;float x1x1 = x1*x1;float y1y1 = y1*y1;float x2x2 = x2*x2;float y2y2 = y2*y2;float x3x3 = x3*x3;float y3y3 = y3*y3;float x2y3 = x2*y3;float x3y2 = x3*y2;float x2_x3 = x2-x3;float y2_y3 = y2-y3;float x1x1py1y1 = x1x1 + y1y1;float x2x2py2y2 = x2x2 + y2y2;float x3x3py3y3 = x3x3 + y3y3;A = x1 * y2_y3 - y1 * x2_x3 + x2y3 - x3y2;B = x1x1py1y1 * (-y2_y3) + x2x2py2y2 * (y1-y3) + x3x3py3y3 * (y2-y1);C = x1x1py1y1 * x2_x3 + x2x2py2y2 * (x3 - x1) + x3x3py3y3 * (x1-x2);D = x1x1py1y1 * (x3y2 - x2y3) + x2x2py2y2 * (x1*y3 - x3*y1) + x3x3py3y3 * (x2*y1-x1*y2);x=-B/(2*A);y=-C/(2*A);r=sqrt((B*B+C*C-4*A*D)/(4*A*A));//-1表示圆不存在if(!A)cout<<"-1"<<endl;elseprintf("%.4lf %.4lf %.4lf\n",x,y,r);}

已知三点求圆心和半径相关推荐

  1. 已知三点求圆心与半径

    已知三点求圆心与半径  kezunhai@gmail.com http://blog.csdn.net/kezunhai 在计算机图像图形学中,经常会用到求圆心或圆半径的情况,本文介绍一种已知三个点求 ...

  2. C#已知三点求圆方程算法

    如果不赶时间可以自己推算出算式或者直接参考另一个博主的文章: 三点确定一个圆的计算方法_Ivan 的专栏-CSDN博客_三点确定一个圆 程序完整部分<C#已知三点求圆方程算法.rar>已经 ...

  3. 已知三点求平面方程、平面法向量和点到平面的距离

    已知三点p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3),要求确定的平面方程 关键在于求出平面的一个法向量,为此做向量p1p2(x2-x1,y2-y1,z2-z1), p1 ...

  4. matlab已知三点求夹角,已知3点如何求其中两点对第3点的夹角

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:已知3点如何求其中两点对第3点的夹角? 问题详情:有3个问题:1)已知3点如何求其中两点对第3点的夹角?2)如何回答:1)已知3点求 ...

  5. 已知三点求平面方程、平面法向量和点到平面的距离(转载)

    已知三点p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3),要求确定的平面方程 关键在于求出平面的一个法向量,为此做向量p1p2(x2-x1,y2-y1,z2-z1), p1 ...

  6. 已知三点求平面法向量

    空间已知三点的位置p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3),令它们逆时针在空间摆放.这样就可以得到平面的两个向量p1p2(x2-x1,y2-y1,z2-z1),p1 ...

  7. 已知若干点求圆心_【求精干货】高中数学知识点总结归纳高一学生必须掌握

    高中数学高考知识点总结高一必高中数学高一的学生离高考还有两年的时间,别看这两年感觉很长,其实时间一晃就过了,高中数学学习成绩不太好的同学该加油好好学习了.别等到最后一年累死累活的搞,还不一定有效果,今 ...

  8. 圆上三点求圆心和半径

    下面的程序实现用到C++和OpenCV. 先定义一个用于存储圆的数据的结构体CircleData: struct CircleData {Point2f center;int radius; }; 假 ...

  9. 已知两点求直线一般方程,已知三点求平面一般方程

    我们知道,直线的一般方程是Ax+By+C=0,而平面的一般方程是Ax+By+Cz+D=0. 对于直线方程,有ABC三个未知数.但我们知道,已知两个点只能求出两个未知数.对于平面方程是同理的.事实上,一 ...

最新文章

  1. 源码阅读:AFNetworking(十六)——UIWebView+AFNetworking
  2. python第一章思维导图_阅读课本第一章内容后,使用思维导图画出你所理解的
  3. 咕泡-装饰器 decorator 设计模式笔记
  4. 漫长的数据中心绿化之路到底该如何走www.shzhenai.com
  5. AAAI 2021 | 学习截断信息检索排序列表
  6. 计算机网络:05---网络类型:局域网、城域网、广域网、个域网、无线网络
  7. springboot日志处理
  8. 洛谷P2296-寻找道路【日常图论,最短路,SPFA】
  9. TOP 10 开源的推荐系统简介
  10. Flask初级(十)flash与前台交互post详解
  11. C#中combobox不可编辑与不可选择
  12. bitvise一个非常好用的ssh软件
  13. 51单片机 之 8*8 LED点阵(解决程序烧录没反应、显示拖影问题、取字模软件)
  14. python 评论分析_python分析评论内容是积极的还是消极的(应用朴素做分词处理及情感识别)...
  15. NOIP2017酱油记
  16. ipad无线怎么重新连接到服务器,iPad不能连接无线怎么办 iPad不能连接无线解决方法【详解】...
  17. 【数据库】用户管理---君权神授
  18. 微软的“胡萝卜”会比“大棒”更有效吗
  19. 复制文本到word中时产生底色的去除方法
  20. jsx中文是什么牌子口红_cl口红是什么牌子 cl口红中文名字

热门文章

  1. CV2逐步学习-1.imread()详解+cvtColor()颜色空间转换
  2. 通过BACnet物联网关实现楼宇自动化的物联网解决方案
  3. 【数据结构】布隆过滤器:BloomFilter原理及Java实现
  4. 面试官刁难:Java字符串可以引用传递吗?
  5. 2021年压力容器作业R2移动式压力容器充装证考试题库
  6. Arduino温度传感器全系列使用详解
  7. BZOJ-4811: [Ynoi2017]由乃的OJ (树链剖分 线段树维护区间操作值 好题)
  8. windows xp下载python3.5.8_Python3.5中文版下载
  9. MNE-Python读取MATLAB保存的.mat文件
  10. 以 rte_mempool_ops_table 为例描述 dpdk 程序库链接顺序对程序执行的影响