php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 433|回复: 0

MATLAB实现空间点拟合圆

[复制链接]

3150

主题

3160

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7976
贡献
0
注册时间
2021-4-14
最后登录
2024-11-24
在线时间
763 小时
QQ
发表于 2022-8-15 11:25:28 | 显示全部楼层 |阅读模式
[mw_shl_code=applescript,true]M=load('F:\zhang\内点的数据.txt')

[num dim]=size(M);

L1=ones(num,1);
A=(M'*M)\M'*L1;       % 求解平面法向量

B=zeros((num-1)*num/2,3);

count=0;
for i=1:num-1
    for j=i+1:num   
        count=count+1;
        B(count,=M(j,-M(i,;
    end   
end

L2=zeros((num-1)*num/2,1);
count=0;
for i=1:num-1
    for j=i+1:num
        count=count+1;
        L2(count)=(M(j,1)^2+M(j,2)^2+M(j,3)^2-M(i,1)^2-M(i,2)^2-M(i,3)^2)/2;
    end
end

D=zeros(4,4);
D(1:3,1:3)=(B'*B);
D(4,1:3)=A';
D(1:3,4)=A;

L3=[B'*L2;1]
C=(D')\(L3)   % 求解空间圆圆心坐标

C=C(1:3);

radius=0;
for i=1:num
    tmp=M(i,-C';
    radius=radius+sqrt(tmp(1)^2+tmp(2)^2+tmp(3)^2);
end
r=radius/num            %  空间圆拟合半径
figure
h1=plot3(M(:,1),M(:,2),M(:,3),'*');
%set(gca,'xlim',[11.4 11.7]);
%%%%   绘制空间圆  %%%%
n=A;
c=C;
theta=(0:2*pi/100:2*pi)';    %  theta角从0到2*pi
a=cross(n,[1 0 0]);          %  n与i叉乘,求取a向量
if ~any(a)                   %  如果a为零向量,将n与j叉乘
    a=cross(n,[0 1 0]);
end
b=cross(n,a);      % 求取b向量
a=a/norm(a);       % 单位化a向量
b=b/norm(b);       % 单位化b向量

c1=c(1)*ones(size(theta,1),1);
c2=c(2)*ones(size(theta,1),1);
c3=c(3)*ones(size(theta,1),1);

x=c1+r*a(1)*cos(theta)+r*b(1)*sin(theta);  % 圆上各点的x坐标
y=c2+r*a(2)*cos(theta)+r*b(2)*sin(theta);  % 圆上各点的y坐标
z=c3+r*a(3)*cos(theta)+r*b(3)*sin(theta);  % 圆上各点的z坐标

hold on;
h2=plot3(x,y,z,'-r');
h3=plot3(c1,c2,c3,'r.','MarkerSize',20);
xlabel('x轴')
ylabel('y轴')
zlabel('z轴')
%text(c1,c2,c3,'(0.0814,0.0593,3.0278)');
legend([h1 h2 h3],'控制点','拟合圆','圆心');
grid on[/mw_shl_code]

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-24 10:16 , Processed in 0.934066 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表