使用MATLAB计算点到直线距离
2014-06-28 22:54
2703 查看
给定平面上 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
我是用的是内积的方法求解,依据原理是使用内积求出直线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
相关文章推荐
- Matlab 集群计算使用心得
- (数值计算方法)matlab的使用
- 使用MATLAB进行计算
- 使用MATLABD数值法计算定积分或反常积分
- [初学笔记] matlab中的while loop中使用break语句的新理解和运用: 计算和赋值放到循环里头
- (数值计算方法)matlab的使用
- 使用Matlab结合神经网络模型对多波段影像进行计算
- 使用Matlab从Excel中读取数据并实现回归统计计算
- 科学计算 | Matlab 使用 GPU 并行计算
- Matlab------ Matlab 2012b 使用Maple 17内核进行符号计算及Mupad与maple内核的切换
- 远程计算_使用Matlab计算引擎
- VLFeat-使用matlab版本计算HOG
- 使用Matlab计算两条线的交点及三角形垂心
- 使用matlab计算DFT时需要注意的幅值对应问题
- VLFeat-使用matlab版本计算HOG
- 使用MATLAB实现计算结果的图形表示
- 使用matlab版本计算HOG 最为简单的计算方法 使用 vlfeat
- matlab 并行计算使用心得 (不断补充)
- MATLAB并行计算工具箱使用
- 计算Java日期--学习怎样创建和使用日期