如何计算3D空间中点到直线的垂直距离向量?
3D空间中点到直线的垂直距离向量计算
基于Stack Overflow相关思路,我们要实现3D空间中点到直线的垂直距离向量计算(不只是模长)。先看现有计算模长的代码:
import numpy as np norm = np.linalg.norm p1 = np.array([0,0,0]) p2 = np.array([10,0,3]) p3 = np.array([6, -3, 5]) ppDist = np.abs(norm(np.cross(p2-p1, p1-p3)))/norm(p2-p1) print(ppDist) # 输出:4.28888043816146
要得到垂直距离向量,核心思路是:从直线上一点指向目标点的向量,减去该向量在直线方向向量上的投影向量,剩下的就是垂直距离向量。具体代码实现如下:
import numpy as np norm = np.linalg.norm p1 = np.array([0, 0, 0]) p2 = np.array([10, 0, 3]) p3 = np.array([6, -3, 5]) # 直线的方向向量 dir_vec = p2 - p1 # 从p1指向p3的向量 vec_p1p3 = p3 - p1 # 计算向量在方向向量上的投影长度 proj_length = np.dot(vec_p1p3, dir_vec) / norm(dir_vec) # 得到投影向量 proj_vec = (proj_length / norm(dir_vec)) * dir_vec # 垂直距离向量 = 原向量 - 投影向量 perp_distance_vec = vec_p1p3 - proj_vec print(perp_distance_vec) # 输出:[ 0.88073394 3. -2.93577982] print(norm(perp_distance_vec)) # 输出:4.28888043816146
运行后得到的向量模长和之前的结果一致,验证了正确性。
3D空间点到直线垂直距离可视化:
内容的提问来源于stack exchange,提问作者beta green
相关产品推荐
相关产品推荐

