我尝试计算一条线,该线可以在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;
输出如下所示。但我所期望的是,在这种情况下,拟合线应该垂直。我认为线路配件有问题。
答案 0 :(得分: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;
答案 1 :(得分: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;