点到向量距离(含Python代码)

向量间投影和距离

这段时间用到了点到向量的距离,发现已经还给高数老师了。借这篇博客(参考英文博客)总结回顾一下,并且附上Python代码。先回顾下向量点积和叉乘公式,ab=|a||b|cos(θ)a×b=|a||b|sin(θ)

从下图可以看出b向量在a向量上的投影长度是|b|cos(θ) ,可以通过ba的点积除以a的长度,实际的投影向量projab=(a/|a|)(ab/|a|) 。同理,ba的距离为|b|sin(θ) ,可以通过ba的叉乘除以a的长度得到,即orthab=(a×b)/|a| 。可知distance=|a×b|/|a| ,并且b=projab+orthab

内积

点到向量的距离

考虑下图中上半部分,求点P到直线L的距离,其中L的方向向量是v。任取直线上一点Q,d=|QP×v|/|v| ,设P点座标为(1,3,8),Q点座标是(-2,1,3),可知QP=<3,2,11> ,另设v=<1,2,1>

距离

通过叉乘的计算公式(如下图,联想行列式计算公式),我们可知QP×v=20i+14j8k 。通过distance=|a×b|/|a| ,可知d10.49

det
det1

Python程序

可以通过Python脚本模拟上述过程,代码如下。np.cross(QP,v)QP×vnp.linalg.norm(v)|v| ,两者相除之后再进行一次np.linalg.norm 得到d=|QP×v|/|v| ,结果跟手动计算一致。

import numpy as np

QP = np.array([3,2,11])
v = np.array([1,-2,-1])

h = np.linalg.norm(np.cross(QP, v)/np.linalg.norm(v))

print h
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章