點到向量距離(含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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章