使用MATLAB计算点到直线距离

来源:互联网 发布:寻找淘宝客 编辑:程序博客网 时间:2024/06/05 03:15

给定平面上 x1, x2, x3三个点,求x1到x2、x3之间的直线的距离。

我是用的是内积的方法求解,依据原理是使用内积求出直线x2x1 与 直线x3x1的夹角cos值,进而求出sin值,再求出x1到x2x3的距离。

这种方法的不足之处是,当三点之中有点重合时,需要特殊判断;而且使用到了除法与开根号,降低了速度。

代码如下:

x1=[1 ;0];
x2=[0 ;1];
x3=[1 ;0];
vx1x2 = x2 - x1;%向量x1到x2
vx1x3 = x3 - x1;%向量x1到x3
if 0 == vx1x2'* vx1x2 %如果x1与x2重合,注意,对浮点数采用等于0的判断不可靠
    dis = 0
elseif 0 == vx1x3'*vx1x3%如果x1与x3重合,这种情况下距离是否为0需要自己定义
    dis = 0
else
    inner_product = vx1x2' * vx1x3;%两个向量内积
    inner_product_2 = inner_product * inner_product;%内积平方
    cos_2 = inner_product_2 / (vx1x2'* vx1x2) / (vx1x3'*vx1x3);%夹角cos值的平方
    sin_2 = 1 - cos_2;%夹角sin的平方
    dis_2 = (vx1x3'*vx1x3) * sin_2;
    dis = sqrt(dis_2)%距离
end
        

0 0
原创粉丝点击