1

MATLABで2次元座標を持ついくつかの点を指定してフィットできる線を計算しようとしています。しかし、結果は私が期待したものではありません。私が間違っていることがあるかもしれません。誰かが私を助けることができますか?どうもありがとう。コードは次のとおりです。

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;

出力は次のようになります。しかし、私が期待したのは、この場合、フィットした線が垂直になるはずだということです。ラインフィッティングに問題があると思います。 ここに画像の説明を入力してください

4

2 に答える 2

4

与えられたように、このデータに合理的な多項式を当てはめることは不可能です。

    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;

ここに画像の説明を入力してください

于 2011-08-05T20:44:50.410 に答える
3

問題は基本的に、垂直線をスロープインターセプト形式で表現できないことだと思います。x / yを自分に合わせて反転すると、正しい結果が得られます。

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;
于 2011-08-05T20:43:53.720 に答える