通过三个不共线的平面点绘制圆形/MATLAB实现

1: 三个不共线的点求解圆心和半径

假设三个不共线的点的坐标分别为P1(x1,y1)、P2(x2,y2)P1(x1,y1)、P2(x2,y2)P1(x1,y1)、P2(x2,y2)和P3(x3,y3)P3(x3,y3)P3(x3,y3),设过三个不共线点的圆的圆心和半径分别为(x,y)和R(x,y)和R(x,y)和R,根据圆的公式可以得到:{(x−x1)2+(y−y1)2=R2(x−x2)2+(y−y2)2=R2(x−x3)2+(y−y3)2=R2\begin{cases}(x-x1)^2+(y-y1)^2=R^2\\(x-x2)^2+(y-y2)^2=R^2\\(x-x3)^2+(y-y3)^2=R^2\end{cases} ⎩⎪⎨⎪⎧​(x−x1)2+(y−y1)2=R2(x−x2)2+(y−y2)2=R2(x−x3)2+(y−y3)2=R2​将上述公式展开移项后得到:{x2+y2+x12+y12=2x1x+2y1y+R2x2+y2+x22+y22=2x2x+2y2y+R2x2+y2+x32+y32=2x3x+2y3y+R2\begin{cases}x^2+y^2+x1^2+y1^2=2x1x+2y1y+R^2\\x^2+y^2+x2^2+y2^2=2x2x+2y2y+R^2\\x^2+y^2+x3^2+y3^2=2x3x+2y3y+R^2\end{cases} ⎩⎪⎨⎪⎧​x2+y2+x12+y12=2x1x+2y1y+R2x2+y2+x22+y22=2x2x+2y2y+R2x2+y2+x32+y32=2x3x+2y3y+R2​通过对上述公式合并整理可以得到:
{(x2−x1)x+(y2−y1)y=0.5(x22+y22−x12−y12)(x3−x1)x+(y3−y1)y=0.5(x32+y32−x12−y12)(x3−x2)x+(y3−y2)y=0.5(x32+y32−x22−y22)\begin{cases}(x2-x1)x+(y2-y1)y=0.5(x2^2+y2^2-x1^2-y1^2)\\(x3-x1)x+(y3-y1)y=0.5(x3^2+y3^2-x1^2-y1^2)\\(x3-x2)x+(y3-y2)y=0.5(x3^2+y3^2-x2^2-y2^2)\\\end{cases} ⎩⎪⎨⎪⎧​(x2−x1)x+(y2−y1)y=0.5(x22+y22−x12−y12)(x3−x1)x+(y3−y1)y=0.5(x32+y32−x12−y12)(x3−x2)x+(y3−y2)y=0.5(x32+y32−x22−y22)​将上述方程构成矩阵形式,既有:Aθ=BA \theta = BAθ=B其中A=[x2−x1y2−y1x3−x1y3−y1x3−x2y3−y2],B=0.5[x22+y22−x12−y12x32+y32−x12−y12x32+y32−x22−y22]A=\begin{bmatrix} x2-x1 & y2-y1 \\ x3-x1 & y3-y1 \\ x3-x2 & y3-y2 \end{bmatrix},B=0.5\begin{bmatrix} x2^2+y2^2-x1^2-y1^2 \\ x3^2+y3^2-x1^2-y1^2 \\ x3^2+y3^2-x2^2-y2^2 \end{bmatrix}A=⎣⎡​x2−x1x3−x1x3−x2​y2−y1y3−y1y3−y2​⎦⎤​,B=0.5⎣⎡​x22+y22−x12−y12x32+y32−x12−y12x32+y32−x22−y22​⎦⎤​
由于上述方程为线性方程,也不存在误差,利用最小二乘求得圆心的坐标为:θ=(ATA)−1ATB\theta =(A^{T}A) ^{-1}A^{T}Bθ=(ATA)−1ATB
那么圆心的坐标有:x=θ(1),y=θ(2)x=\theta(1),y=\theta(2)x=θ(1),y=θ(2)
利用得到的圆心可以直接求得圆的半径为:R=(x−x1)2+(y−y1)2R=\sqrt{(x-x1)^2+(y-y1)^2}R=(x−x1)2+(y−y1)2​

2: 得到圆的边的坐标

当得到过三点圆的圆心和半径后,可以利用圆的参数方程得到圆的边的坐标,既有:{x=x0+Rcosαy=y0+Rsinα,其中α∈[0,2π]\begin{cases} x=x0+Rcos{\alpha}\\ y=y0+Rsin{\alpha}\end{cases} ,其中 \alpha \in{[0,2\pi]}{x=x0+Rcosαy=y0+Rsinα​,其中α∈[0,2π]其中,xxx为圆边上某一点的横坐标,yyy为圆边上某一点的纵坐标,α\alphaα为圆边上某一点对应的角度,x0x0x0和y0y0y0为该圆的圆心,RRR为该圆的半径。

3: 代码实现-MATLAB

function Result = ThreePoint2Circle(P1, P2, P3)
%% 求圆心和半径
x1 = P1(1);    x2 = P2(1);    x3 = P3(1);
y1 = P1(2);    y2 = P2(2);    y3 = P3(2);
z1 = x2^2 + y2^2 - x1^2 - y1^2;
z2 = x3^2 + y3^2 - x1^2 - y1^2;
z3 = x3^2 + y3^2 - x2^2 - y2^2;
A = [(x2-x1), (y2-y1); (x3-x1), (y3-y1); (x3-x2), (y3-y2)];
B = 0.5*[z1;  z2;  z3];
P0 = (A'*A)\A'*B;
R1 = sqrt( (P0(1) - P1(1))^2 + (P0(2) - P1(2))^2 );
R2 = sqrt( (P0(1) - P2(1))^2 + (P0(2) - P2(2))^2 );
R3 = sqrt( (P0(1) - P3(1))^2 + (P0(2) - P3(2))^2 );
R = (R1 + R2 + R3)/3;
%% 绘制圆
theta = (0:pi/360:2*pi)';
Result = zeros(size(theta,1),4);
for i = 1: size(theta,1)Result(i,1) = i;Result(i,2) = theta(i);Result(i,3) = P0(1) + R*cos(theta(i));Result(i,4) = P0(2) + R*sin(theta(i));
end
figure();plot(Result(:,3),Result(:,4),'b-');hold on;
grid on; xlabel('x');ylabel('y'); axis equal;
end

输出的结果为0.5°间隔,其中第1列为点号,第2列为角度,第3列为横坐标,第4列为纵坐标。

4: 代码测试

(1)过(1,1)、(3,2)、(5,1)(1,1)、(3,2)、(5,1)(1,1)、(3,2)、(5,1)画圆


(2)过(1.2,1.2)、(8,0.5)、(13.8,1.2)(1.2,1.2)、(8,0.5)、(13.8,1.2)(1.2,1.2)、(8,0.5)、(13.8,1.2)画圆


结束!

MATLAB实现利用三个不共线的点绘制圆(包括圆心和半径的求解)相关推荐

  1. kpca故障诊断matlab,PCA_kpca 利用pca和 对CSTR过程进行故障诊断,包括7个噪声及开环和串 制 matlab 263万源代码下载- www.pudn.com...

    文件名称: PCA_kpca下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 1188 KB 上传时间: 2016-09-05 下载次数: 0 提 供 者: ...

  2. 空间3点求三点所在空间圆的圆心空间坐标

    参考:http://blog.sina.com.cn/s/blog_648868460100h2b8.html(这个博主还有很多关于工程测量的知识和空间几何计算的知识) 已知空间三点的坐标为(x1,y ...

  3. 谱估计matlab,利用MATLAB工具箱比较三种谱估计算法

    总第175期2009年第1期 舰船电子工程 Ship Electr onic Engineering V o l.29No.1 96 利用MATLAB工具箱比较三种谱估计算法* 盖明明1)郗海龙2)姜 ...

  4. matlab仿真弹簧波,基于Matlab/Simulink的三弹簧谐振子微振动的仿真实验

    第 29 卷 第 6 期 大 学 物 理 实 验 Vol. 29 No. 6 2016 年 12 月 PHYSICAL EXPERIMENT OF COLLEGE Dec. 2016 收稿日期: 20 ...

  5. matlab中利用快速傅里叶变换对股票价格进行频域分析

    matlab中利用快速傅里叶变换对股票价格进行频域分析 在学习matlab的快速傅里叶变换时,发现可以用他来对股票进行相对简单的快速处理,以判断股票价格的周期规律. 采集股票信息 本文重点在于快速傅里 ...

  6. Matlab绘图(三)散点图—四维数据、五维数据、六维数据、七维数据散点图可视化绘制

    Matlab绘图(三)散点图-四维数据.五维数据.六维数据.七维数据可视化分析 一.前言 二.散点图特征分析 (1)原理分析: (2)方案分析: 四维数据进行可视化方案 五维数据进行可视化方案 六维数 ...

  7. 基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计

    基于matlab的mk2三自由度机械臂轨迹规划及控制器仿真设计(报告+ppt) 摘 要:本文的研究对象为EEZYbotARM MK2三自由度机械臂,分析了其机械结构,建立D-H参数表,同时在MATLA ...

  8. 实验三matlab实现,实验三_MATLAB基本绘图练习.doc

    实验三_MATLAB基本绘图练习 实验 Matlab强大的图形处理功能掌握应用Matlab实现二维图形和三维图形的绘制和控制与表现方法1.y1=sin(x)),y2=cos(x) (),等间隔取100 ...

  9. matlab迭代求解,[基于matlab平台的三种迭代法求解矩阵方程]matlab迭代法求方程的根...

     数值分析第二次作业 学院:电子工程学院 基于matlab平台的三种迭代法求解矩阵方程组 求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/14 ...

最新文章

  1. CF786B Legacy(线段树优化建边模板 + 最短路)
  2. 散列表(也叫哈希表),
  3. 2013 javaB3 振兴中华、从我做起
  4. HDU 3934 Summer holiday(凸包内接最大三角形)
  5. P2597 [ZJOI2012]灾难(top+lca)
  6. HDLBits答案(23)_找BUG
  7. 你应该知道的jQuery技巧【收藏】
  8. mysql varchar 长度限制_MySQL数据库varchar的限制规则说明
  9. 车祸是怎么发生的 不论你是否开车都该看看!
  10. vs中项目解决方案和项目的关系
  11. sublime Text3安装插件
  12. 2016-11-15NOIP模拟赛
  13. 不用PLC编程,实现USB或串口条码枪对接PLC,数据直接写入寄存器
  14. 智伴机器人安卓怎么设置个人热点_智伴机器人怎么联网?看这个联网视频教程...
  15. 微软 MSCRM 教育成功案例 界面展示
  16. SAP中成本中心实际/计划/差异报表查询实例
  17. 如火般的风马: 快速迁移本地项目到Bluemix云平台
  18. 对于Verilog语言的一些总结
  19. Android学习笔记之ViewFlipper
  20. 求字符串中回文子串的个数(回文树详解)

热门文章

  1. Foxmail接受密码错误
  2. 【PDF密码删除软件】Enolsoft PDF Password Remover for Mac
  3. Julia ---- 为Julia做一下辩解
  4. 上海北京深圳地网全网cdn增值电信许可证资质申请流程
  5. Teams会议/实时事件中的参会者报告详解
  6. 雷军再次承诺:小米9下周二开放购买
  7. Docker初识:安装centos(ssh远程登录)
  8. 一些RJS资源和演示入门教程
  9. SuperMap GIS地质体数据处理QA
  10. 在华为工作的优点和缺点