最小的平方距离

Abh*_*tia -2 matlab line points

我有两个有序的x(xcor)和y(ycor)值数组.加入第一个和最后一个点给出一条线.我想计算这条线上所有点的垂直距离.这类似于最小平方距离.有没有直接的方法在matlab中执行此操作?还请注意,距离的符号应代表该线的点的侧面. 在此输入图像描述

 xy =
     -121.9067  -53.5483
     -122.0750  -53.5475
     -122.4750  -53.5243
     -123.0975  -53.4835
     -123.9050  -53.4168
     -124.8050  -53.3235
     -125.7025  -53.2467
     -126.5675  -53.1800
     -127.3825  -53.1215
     -128.1500  -53.0798
     -128.8825  -53.0468
     -129.6000  -53.0452
     -130.3150  -53.1133
     -131.0400  -53.2532
     -131.7850  -53.4513
     -132.5525  -53.6877
     -133.3425  -53.9345
     -134.1600  -54.1758
     -135.0075  -54.4115
     -135.8675  -54.6480
     -136.7375  -54.9040
     -137.5075  -55.2635
     -138.1875  -55.7435
     -138.7775  -56.3333
     -139.2850  -57.0665
     -139.8450  -57.9285
     -140.4550  -58.9492
     -141.1575  -60.0988
     -141.9825  -61.3415
     -142.9275  -62.6172
     -144.0050  -63.8517
     -145.2125  -65.0523
     -146.5450  -66.1715
     -147.9950  -67.1727
     -149.5575  -68.0570
     -151.2225  -68.8152
     -152.9925  -69.4493
     -154.8625  -69.9500
     -156.8300  -70.3063
     -158.8700  -70.5280
     -160.9050  -70.6017
     -162.8550  -70.6287
     -164.6525  -70.7372
     -165.5367  -70.7550
     -166.3450  -70.8620
Run Code Online (Sandbox Code Playgroud)

Jon*_*nas 9

如果您有一个向量AB,则从C点到该向量的距离可以按如下方式计算:

  • 归一化矢量AB
  • 计算矢量AC
  • 将矢量AC投影到AB上
  • 从AC中减去投影
  • 计算结果的长度

换句话说,您将AC拆分为与AB平行的组件和垂直的组件,并计算后者的长度.

如果你有数组xy,你可以做以下

xy = [x(:),y(:)];
abVector = xy(end,:) - xy(1,:); %# a is the first, b the last point
abVectorNormed = abVector./norm(abVector);

acVector = bsxfun(@minus, xy, xy(1,:));

acParallelLength = sum(bsxfun(@times, acVector , abVectorNormed ),2);
acParallelVector = bsxfun(@times, acParallelLength, abVectorNormed );

perpendicularVector = acVector - acParallelVector;

perpendicularDistance = sqrt(sum(perpendicularVector.^2,2)); 
Run Code Online (Sandbox Code Playgroud)

编辑你问了数字,因为代码"不起作用"在你手中.请参见下图(顶部:原始数据;底部:垂直距离)和绘制它们的命令; 我的眼中数据看起来相当合理.

在此输入图像描述

subplot(2,1,1),plot(xy(:,1),xy(:,2),'or')
hold on, plot([xy(1,1),xy(1,1)+abVector(1)],[xy(1,2),xy(1,2)+abVector(2)],'b')
hold on, plot([xy(1,1)+acParallelVector(:,1),xy(:,1)]',[xy(1,2)+acParallelVector(:,2),xy(:,2)]','r')
axis equal %# important to see right angles as such
subplot(2,1,2),stem(xy(:,1),perpendicularDistance,'r')
ylabel('perpendicular distance')
Run Code Online (Sandbox Code Playgroud)

  • @AbhishekBhatia:我用各种线条绘制了数字.结果对我来说很合理.为什么你认为这是错的? (2认同)