Подгонка линии к 2d точкам в MATLAB - PullRequest
1 голос
/ 06 августа 2011

Я пытаюсь рассчитать линию, которая может соответствовать заданным нескольким точкам с 2-й координатой в MATLAB.Но результата я не ожидал.Может быть, я что-то не так понимаю.Может кто-нибудь мне помочь?Большое спасибо.Код выглядит следующим образом:

ptsAroundVCP_L=[180,188;177,191;174,191;171,191;168,188;] % points with 2-d coordinate 
curLinePar_L=polyfit(ptsAroundVCP_L(:,2),ptsAroundVCP_L(:,1),1); % parameter of the fitted line

%% begin to plot
plotx=1:256;    
figure(11);hold on;
plot(ptsAroundVCP_L(:,2),ptsAroundVCP_L(:,1),'sb');    
ploty_L=polyval(curLinePar_L,plotx);
plot(plotx,ploty_L,'r');
hold off;

Вывод отображается следующим образом.Но я ожидал, что в этом случае подогнанная линия должна идти вертикально.Я думаю, что что-то не так с установкой линииenter image description here

Ответы [ 2 ]

4 голосов
/ 06 августа 2011

Невозможно подобрать какой-либо разумный многочлен к этим данным, как указано:

    X     Y
   188   180
   191   177
   191   174
   191   171
   188   168

Возьмите транспонирование, и вы получите что-то разумное:

ptsAroundVCP_L=[180,188;177,191;174,191;171,191;168,188;]

y = ptsAroundVCP_L(:,2);
x = ptsAroundVCP_L(:,1);

p = polyfit(x, y, 2);

plotx= linspace(150, 200, 101);

figure(11);

plot(x, y, 'sb');    
hold on

ploty = polyval(p, plotx);
plot(plotx, ploty, '-');
hold off;

enter image description here

3 голосов
/ 06 августа 2011

Я думаю, что проблема в основном в том, что вы не можете представить вертикальную линию в форме пересечения склона.Если вы перевернете х / у в нужную форму, вы получите правильный результат:

ptsAroundVCP_L=[180,188;177,191;174,191;171,191;168,188;] % points with 2-d coordinate 
curLinePar_L=polyfit(ptsAroundVCP_L(:,1),ptsAroundVCP_L(:,2),1); % parameter of the fitted line

%% begin to plot
plotx=168:180;
figure(11);hold on;
plot(ptsAroundVCP_L(:,1),ptsAroundVCP_L(:,2),'sb');
ploty_L=polyval(curLinePar_L,plotx);
plot(plotx,ploty_L,'r');
hold off;
...