给定平面上 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