用matlab根据三维平面的点求圆心坐标与半径

这几天用到一个小功能,由空间中圆上的三个点求圆心坐标及半径,写了个很好用的函数,分享一下!
在这里插入图片描述
想要直接用的可以去我资源界面下载,与博客同名。
可以转载,但是请在文章内@我。

具体代码

function [pc,r]=points2circle(p1,p2,p3)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 由圆上三点确定圆心和半径%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% INPUT% p1   :  - 第一个点坐标, 行向量 1x3% p2   :  - 第二个点坐标, 行向量 1x3% p3   :  - 第三个点坐标, 行向量 1x3% 若输入1x2的行向量, 末位自动补0, 变为1x3的行向量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% OUTPUT% pc   :  - 圆心坐标, 行向量 1x3% r    :  - 半径, 标量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 调用示例1 - 平面上三个点% [pc1,r1]=points2circle([1,2],[-2,1],[0,-3])% 调用示例2 - 空间中三个点% [pc2,r2]=points2circle([1,2,-1],[-2,1,2],[0,-3,-3])%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 输入检查validateattributes(p1,{'numeric'},{'row'},1);% 行向量validateattributes(p2,{'numeric'},{'row'},2);validateattributes(p3,{'numeric'},{'row'},3);num1=length(p1);num2=length(p2);num3=length(p3);if (num1 == num2) && (num2 == num3)if num1 == 2p1=[p1,0];p2=[p2,0];p3=[p3,0];elseif num1 ~= 3error('仅支持二维或三维坐标输入');endelseerror('输入坐标的维数不一致');end% 共线检查temp01=p1-p2;temp02=p3-p2;temp03=cross(temp01,temp02);temp=(temp03*temp03')/(temp01*temp01')/(temp02*temp02');if temp < 10^-6error('三点共线, 无法确定圆');endmat1=[p1,1;p2,1;p3,1];% size = 3x4m=+det(mat1(:,2:4));n=-det([mat1(:,1),mat1(:,3:4)]);p=+det([mat1(:,1:2),mat1(:,4)]);q=-det(mat1(:,1:3));mat2=[[p1*p1';p2*p2';p3*p3'],mat1;2*q,[-m,-n,-p,0]];% size = 4x5A=+det(mat2(:,2:5));B=-det([mat2(:,1),mat2(:,3:5)]);C=+det([mat2(:,1:2),mat2(:,4:5)]);D=-det([mat2(:,1:3),mat2(:,5)]);E=+det(mat2(:,1:4));pc=-[B,C,D]/2/A;r=sqrt(B^2+C^2+D^2-4*A*E)/2/abs(A);end
编写不易,求个点赞!!!!!!!
“你是谁?”“一个看帖子的人。”“看帖子不点赞啊?”“你点赞吗?”“当然点了。”“我也会点。”“谁会把经验写在帖子里。”“写在帖子里的那能叫经验贴?”“上流!”
cheer!!!

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部