空間三維散點資料的線性擬合

2021-07-10 21:43:30 字數 1964 閱讀 2608

clc;

clear all;

close all;

num = 50; % num個隨機點

rand1 = randi([-1,1],num,3); %雜訊範圍

rand2 = randi([-1,1],num,3);

point1 = [1:0.5:0.5*(num+1); 1:0.5:0.5*(num+1); 1:0.5:0.5*(num+1)]'+ rand1;

plot3(point1(:,1),point1(:,2),point1(:,3),'r.');

point2 = [0.5*(num+1):-0.5:1; 1:0.5:0.5*(num+1); 0.5*(num+1):-0.5:1]'+ rand2;

hold on;

plot3(point2(:,1),point2(:,2),point2(:,3),'g+');

%直線擬合1

t1=linspace(0,25);%有效範圍

f1 = @(p)arrayfun(@(n)norm(cross(point1(num,:)-[p(1),p(2),p(3)],...

[p(4),p(5),p(6)]))/norm([p(4),p(5),p(6)]),[1:size(point1,1)]);

p= lsqnonlin(f1,[1 1 1 1 1 1]);

plot3(p(1)+t1*p(4),p(2)+t1*p(5),p(3)+t1*p(6));

%直線擬合2

t2=linspace(0,-8);

f2 = @(p)arrayfun(@(n)norm(cross(point2(num,:)-[p(1),p(2),p(3)],...

[p(4),p(5),p(6)]))/norm([p(4),p(5),p(6)]),[1:size(point2,1)]);

p= lsqnonlin(f2,[25,2,25,1,1,1]); %初始化迭代

plot3(p(1)+t2*p(4),p(2)+t2*p(5),p(3)+t2*p(6));

grid on;

hold off;

fit_line.m

function [a,resnorm] = fit_line(a0,data)

% 對三維資料進行直線擬合,將直線擬合成如下形式:

% x-a(1) y-a(2) z-a(3)

% ------ = ------ = ------

% a(4) a(5) a(6)

% 原理:下面的 d 是各資料點到擬合直線的距離,利用 lsqnonlin 對 d 進行最小二乘

% a0 是初始值,data 是三維資料,第一行是 x,第二行是 y,第三行是 z

[a,resnorm] = lsqnonlin(@fit_line_fun,a0);

function d=fit_line_fun(a)

% 傳給主函式的子函式

xdata=data(1,:);

ydata=data(2,:);

zdata=data(3,:);

point=a(1:3);

v=a(4:6);

d(1:length(xdata))=0;

for n=1:length(xdata)

m=[xdata(n);ydata(n);zdata(n)]-point(:);

d(n)=norm(cross(m,v(:)))/norm(v(:));% 利用解析幾何的知識求距離d

end

end

end

實驗效果圖:

matlab擬合空間曲線。散點擬合三維曲線

問題 已知三組資料,就是直角座標系中的x,y,z的三個陣列,要求在matlab中擬合出這條空間曲線。帖子源資料 a 22.77,17.13,14.37,12.98,12.34,12.12,12.11,12.18,12.27,12.32,12.32,12.27,12.18,12.11,12.12,12...

利用matlab將三維資料擬合成三維曲線

擬合三維曲線貌似可以用相信回歸做,但是matlab有乙個自帶的polyfit函式,可以直接算出二維資料的擬合曲線,用的是最小二乘法的思想。思路其實很簡單,將兩條擬合的二維曲線組合在一起就是三維曲線了。先上 吧 clc clear all fb load leafcloud bend.txt fb l...

空間分割加速三維資料的查詢

最近在對一些模型進行輕量化的處理,需要壓縮模型的大小,並且要求可以較快的讀取載入。原始的模型由3dmax匯出的fbx獲得,鑑於上述要求與fbx模型的格式就選擇了與渲染時的vertex buffer最接近的方式來對模型進行儲存,儲存結構如下 data vertex data 其中每個 data儲存其所...