使用向量的方法计算点到直线的距离
2015-06-19 16:57
579 查看
使用向量的方法效率更高,更简单。
首先要了解什么是向量,什么是向量的模
主要用到了解析几何里的几个公式
向量的加减法 ,如下图所示
向量的加法
向量的减法
问题的原型如下图所示,红色的点为鼠标位置,蓝色的点(x0,y0),(x1,y1)为线段的端点,求红色的点到直线的距离
可以将点到线的距离转换为直角三角形的问题,如下图所示:
我们定义鼠标所在点为M,线段起点为A,终点为B,MA为向量a,AB为向量b,向量c为向量a在向量b上的投影,向量e为M点到AB的垂线,关键就是求出向量e的模。
要得到向量e的模,首先要得到向量e,而要得到向量e就需要得到向量c,问题就转换为了求向量c。
由勾股定理可得
因为c与b的方向相同,所以取
c=(a∗b)|b|b|b| c = \dfrac{(a * b)} {|b|} \dfrac{b}{|b|}
=(a∗b)|b|2b= \dfrac{(a * b)}{|b|^2}b
得到c的向量之后,就可以得到向量
最后两个图片源自https://msdn.microsoft.com/en-us/library/ms969920.aspx
首先要了解什么是向量,什么是向量的模
主要用到了解析几何里的几个公式
a * b = | a | * | b | * cos(x),其中x为向量a,b的夹角
| a | * 单位向量 = a,单位向量为模为1的向量
向量的加减法 ,如下图所示
向量的加法
向量的减法
问题的原型如下图所示,红色的点为鼠标位置,蓝色的点(x0,y0),(x1,y1)为线段的端点,求红色的点到直线的距离
可以将点到线的距离转换为直角三角形的问题,如下图所示:
我们定义鼠标所在点为M,线段起点为A,终点为B,MA为向量a,AB为向量b,向量c为向量a在向量b上的投影,向量e为M点到AB的垂线,关键就是求出向量e的模。
要得到向量e的模,首先要得到向量e,而要得到向量e就需要得到向量c,问题就转换为了求向量c。
由勾股定理可得
|c| = |a| * cos(x),x为向量ab的夹角,而
|a| * cos(x) = |a| * |b| * cos(x) / |b| = a * b / |b|,这样就得到了c的模,这样就可以得到
c = |c| * 单位向量,
因为c与b的方向相同,所以取
单位向量=b / |b|,整理可得:
c=(a∗b)|b|b|b| c = \dfrac{(a * b)} {|b|} \dfrac{b}{|b|}
=(a∗b)|b|2b= \dfrac{(a * b)}{|b|^2}b
得到c的向量之后,就可以得到向量
e = a - c再取e的模即可得到点到直线的距离。
最后两个图片源自https://msdn.microsoft.com/en-us/library/ms969920.aspx
相关文章推荐
- 一步步走进Android MaterialDesign 之 DrawerLayout
- How to install ipsec-tools on RHEL6
- bat批量目光声明
- 【Training versus Testing】林轩田机器学习基石
- 114 Flatten Binary Tree to Linked List 二叉树到单链表的扁平化处理
- IOS prepareForSegue 多窗口切换学习
- 如何编译&使用boost库?
- 好久没更新了,对这段时间做个总结
- ABAP中操作回车、换行、回车加换行、的方案
- 机器学习算法与Python实践之(三)支持向量机(SVM)进阶
- Mac OS 后台服务注册
- LeetCode 之 Two Sum — C++ 实现
- ARM R0-R16
- 机器学习算法与Python实践之(二)支持向量机(SVM)初级
- code
- Linux gperf命令
- Ceph之数据分布:CRUSH算法与一致性Hash
- ASP.NET Ajax和Jquery Ajax实例
- java正则表达式 前后查找
- Java 中利用 axis2 进行webservice 客户端编写