問題重述與幾何模型
已知P1(x1,y1,z1),P2(x2,y2,z2),平面α:ax+by+cz+d=0,求直線P1P2與平面α的交點P。
數學分析
存在性:直線與平面的交點可能有零個,一個,或無數個。
可行性:已知直線上不重合兩點,可以確定一條直線,已知直線與平面,則一定可以得到兩者之間的關系。
向量法
當已知平面的一般式方程時(ax+by+cz+d=0),n⃗ =(a,b,c)′就是平面的法矢量,也就能夠很容易求出點到平面的距離和一個向量到法矢量的投影。由前面的幾何模型,我們容易得出(根據相似三角形原理):
其中:
又點P1到D2的距離為
有
上面過程主要使用向量運算,巧妙避開了求模運算中的開方運算,減少了很多的運算量,而且,容易步驟化,易於編程實現。
Python代碼實現:
import numpy as np p1 = np.array([x1,y1,z1])# p2 = np.array([x2,y2,z2]) plane_normal = np.array([a,b,c]) #a,b,c,d平面方程系數 P1D = (np.vdot(p1,plane_normal)+d)/np.sqrt(np.vdot(plane_normal,plane_normal)) P1D2 = (np.vdot(p2-P1,plane_normal))/np.sqrt(np.vdot(plane_normal,plane_normal)) n = P1D2/P1D p = p1 + n*(p2- p1)#所求交點
原文鏈接:http://blog.csdn.net/smallflyingpig/article/details/51234711?locationNum=8&fps=1