点到线段的最短距离——矢量法

矢量算法过程清晰,如果具有一定的空间几何基础,则是解决此类问题时应优先考虑的方法。当需要计算的数据量很大时,这种方式优势明显。

由于矢量具有方向性,故一些方向的判断直接根据其正负号就可以得知,使得其中的一些问题得以很简单的解决。

用此方法考虑,我们只需要找到向量 方向上的投影,具体如下:

 

             


上面的 方向上的单位向量,其意义是给所求向量确定方向。是的两个向量的内积,且   ,其中θ为向量AP与AB之间的夹角。是向量长度。
 

那么即为上图中线段AC的长度值,不带有方向性。此数值与上述表征方向的 整体构成有大小、有方向的新向量,即为 方向上的投影向量,C为投影点。

根据得到的,由向量的方向性可知:如果情况是上图(a)所示,那么0<r<1;如果是如图(b)所示的情况,那么r ≥1;如果是如图(c)所示的情况,那么得到r ≤0;

特殊情况如点在线段上、点在端点、点在线段延长线上等等的情况全部适用于此公式,只是作为特殊情况出现,无需另作讨论。这也是矢量算法思想的优势所在。

故根据r值的不同,最短距离

         (r 为 |AC|与|AB|的长度比)

转自:https://www.cnblogs.com/lyggqm/p/4651979.html

在MATLAB中,我们可以使用向量运算和标量运算来计算点到线段的最短距离。下面将展示一个简单的MATLAB程序,用于计算点到线段的最短距离。 ```matlab function distance = shortestDistance(point, lineStart, lineEnd) % 计算线段的向量 lineVector = lineEnd - lineStart; % 计算点到线段起点的向量 pointVector = point - lineStart; % 计算点到线段结束点的向量 endVector = point - lineEnd; % 计算点到线段起点的投影向量 projectionVector = dot(pointVector, lineVector) / dot(lineVector, lineVector) * lineVector; % 如果投影向量在线段向量的范围之外,则最短距离点到线段的起点或结束点的距离 if dot(projectionVector, lineVector) < 0 distance = norm(pointVector); elseif dot(endVector, lineVector) > 0 distance = norm(endVector); else % 否则,最短距离点到投影向量的距离 distance = norm(pointVector - projectionVector); end end ``` 在这个程序中,我们定义了一个名为`shortestDistance`的函数,它有三个输入参数:`point`代表点的坐标,`lineStart`代表线段的起点坐标,`lineEnd`代表线段的结束坐标。函数使用向量运算和标量运算来计算点到线段的最短距离。 首先,我们计算线段的向量`lineVector`、点到线段起点的向量`pointVector`和点到线段结束点的向量`endVector`。 然后,我们计算点到线段起点的投影向量`projectionVector`,通过点到线段起点向量与线段向量的内积除以线段向量的模长,再乘以线段向量。 接下来,我们通过判断投影向量是否在线段向量的范围之外来确定最短距离点到线段的起点或结束点的距离,或是点到投影向量的距离。 最后,我们将最短距离返回。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值