三点确定圆心和半径(模版)
struct Point2f{double x,y;
};
struct CircleData
{Point2f center;double radius;
};
//方法一:通过其中两点的中垂线交点求圆心
CircleData findCircle1(Point2f pt1, Point2f pt2, Point2f pt3)
{//定义两个点,分别表示两个中点Point2f midpt1, midpt2;//求出点1和点2的中点midpt1.x = (pt2.x + pt1.x) / 2;midpt1.y = (pt2.y + pt1.y) / 2;//求出点3和点1的中点midpt2.x = (pt3.x + pt1.x) / 2;midpt2.y = (pt3.y + pt1.y) / 2;//求出分别与直线pt1pt2,pt1pt3垂直的直线的斜率double k1 = -(pt2.x - pt1.x) / (pt2.y - pt1.y);double k2 = -(pt3.x - pt1.x) / (pt3.y - pt1.y);//然后求出过中点midpt1,斜率为k1的直线方程(既pt1pt2的中垂线):y - midPt1.y = k1( x - midPt1.x)//以及过中点midpt2,斜率为k2的直线方程(既pt1pt3的中垂线):y - midPt2.y = k2( x - midPt2.x)//定义一个圆的数据的结构体对象CDCircleData CD;//连立两条中垂线方程求解交点得到:CD.center.x = (midpt2.y - midpt1.y - k2* midpt2.x + k1*midpt1.x) / (k1 - k2);CD.center.y = midpt1.y + k1*(midpt2.y - midpt1.y - k2*midpt2.x + k2*midpt1.x) / (k1 - k2);//用圆心和其中一个点求距离得到半径:CD.radius = sqrt((CD.center.x - pt1.x)*(CD.center.x - pt1.x) + (CD.center.y - pt1.y)*(CD.center.y - pt1.y));return CD;
}
//方法二:通过三个点到圆心距离相等建立方程:
CircleData findCircle2(Point2f pt1, Point2f pt2, Point2f pt3)
{//令://A1 = 2 * pt2.x - 2 * pt1.x B1 = 2 * pt1.y - 2 * pt2.y C1 = pt1.y² + pt2.x² - pt1.x² - pt2.y²//A2 = 2 * pt3.x - 2 * pt2.x B2 = 2 * pt2.y - 2 * pt3.y C2 = pt2.y² + pt3.x² - pt2.x² - pt3.y²double A1, A2, B1, B2, C1, C2, temp;A1 = pt1.x - pt2.x;B1 = pt1.y - pt2.y;C1 = (pow(pt1.x, 2) - pow(pt2.x, 2) + pow(pt1.y, 2) - pow(pt2.y, 2)) / 2;A2 = pt3.x - pt2.x;B2 = pt3.y - pt2.y;C2 = (pow(pt3.x, 2) - pow(pt2.x, 2) + pow(pt3.y, 2) - pow(pt2.y, 2)) / 2;//为了方便编写程序,令temp = A1*B2 - A2*B1temp = A1*B2 - A2*B1;//定义一个圆的数据的结构体对象CDCircleData CD;//判断三点是否共线if (temp == 0){//共线则将第一个点pt1作为圆心CD.center.x = pt1.x;CD.center.y = pt1.y;}else{//不共线则求出圆心://center.x = (C1*B2 - C2*B1) / A1*B2 - A2*B1;//center.y = (A1*C2 - A2*C1) / A1*B2 - A2*B1;CD.center.x = (C1*B2 - C2*B1) / temp;CD.center.y = (A1*C2 - A2*C1) / temp;}CD.radius = sqrt((CD.center.x - pt1.x)*(CD.center.x - pt1.x) + (CD.center.y - pt1.y)*(CD.center.y - pt1.y));return CD;
}
三点确定圆心和半径(模版)相关推荐
- 由圆上三点确定圆心和半径(附PythonMatlab程序)
更多阅读:sppy.site 背景 如何计算曲线 y ( x ) ~y(x)~ y(x) 上的曲率,而曲线是由若干离散点构成.我的第一反应是根据离散点差分得到一阶导数 y ′ ~y'~ y′ 和二 ...
- 已知三点求圆心与半径
已知三点求圆心与半径 kezunhai@gmail.com http://blog.csdn.net/kezunhai 在计算机图像图形学中,经常会用到求圆心或圆半径的情况,本文介绍一种已知三个点求 ...
- 圆上三点求圆心和半径
下面的程序实现用到C++和OpenCV. 先定义一个用于存储圆的数据的结构体CircleData: struct CircleData {Point2f center;int radius; }; 假 ...
- C++实现已知圆的任意三点求圆心和半径
原理:圆上的任意两点的连线称作弦,弦的中垂线必过圆心,取三点组成的两条弦的中垂线的交点,即为圆心,再通过圆心求半径. 其中三点坐标为 (dx1,dy1) (dx2,dy2) (dx3,dy3) ...
- 已知三点求圆心和半径
https://blog.csdn.net/youhuakongzhi/article/details/86474619 https://blog.csdn.net/qq_43572555/artic ...
- MATLAB实现利用三个不共线的点绘制圆(包括圆心和半径的求解)
通过三个不共线的平面点绘制圆形/MATLAB实现 1: 三个不共线的点求解圆心和半径 假设三个不共线的点的坐标分别为P1(x1,y1).P2(x2,y2)P1(x1,y1).P2(x2,y2)P1(x ...
- 由三个点的坐标确定圆和球的圆心和半径
利用三个平面或者空间的点位坐标可以求出该平面圆或者球的圆心或者球心和半径 import numpy as np from numpy.linalg import det # 由圆上三点确定圆心和半径# ...
- C#三点法计算圆心坐标和圆半径
引用"System.Drawing" Using指令: using System.Drawing; 代码块: /// <summary> /// 三点法计算圆心坐标和圆 ...
- matlab已知圆心和半径怎么作圆,matlab根据圆心和半径画圆三种方式
% 已知圆心和半径画圆:参考:https://blog.csdn.net/ZLK961543260/article/details/70216089 % 对比三种画圆方法,运算时长对比如下 % vis ...
最新文章
- 随机采样池化--S3Pool: Pooling with Stochastic Spatial Sampling
- 字符串与byte[]之间的转换
- 数据结构与算法——并查集(不相交集合)
- final关键字细节
- SAP CRM IBASE 一致性检查工具
- Windows 下查看端口占用情况 netstat / tasklist / findstr
- 计算几何模板中的代码
- 阿里面试题BIO和NIO数量问题附答案和代码
- python-演练-通过描述符来控制另一个类的实例化参数
- C++socket编程(三):3.3 bind端口
- 华为p20有没有计算机,用华为P20不知道这三个功能就亏大了!第一个很少人知道!...
- 【转】字符编码笔记:ASCII、Unicode、UTF-8 和 Base64
- Linux服务器安全之 fail2ban的安装与配置
- ffmpeg 最简单的水印功能
- c语言烟花表白程序代码,表白神器-七彩烟花源码
- 分享一款超好用的 Web SSH 客户端工具
- xshell查看hdfs文件目录路径_hdfs的shell操作
- html中表格居中对齐
- led背光源工作的条件及结构
- 《电动自行车充电领域的液体冷却技术研究》论文笔记