python實現點到平面的距離

2021-09-29 01:36:57 字數 1853 閱讀 4748

目錄

python實現點到平面的距離

1.三點定面

2.點到面的距離

3.python實現點到面的距離

關於點線面之間關係可以參考:

空間上任意三個不共線的點,可以確定乙個平面,三點定面的例子:

點到面的距離,可參考這個例子

空間上不共線的三個點p1,p2,p3確定乙個平面,計算空間上某個點p4到組成的平面的距離,可如下計算

import numpy as np

def define_area(point1, point2, point3):

"""法向量 :n=

空間上某點:p=

點法式方程:a(x-x0)+b(y-y0)+c(z-z0)=ax+by+cz-(ax0+by0+cz0)

:param point1:

:param point2:

:param point3:

:param point4:

:return:(ax, by, cz, d)代表:ax + by + cz + d = 0

"""point1 = np.asarray(point1)

point2 = np.asarray(point2)

point3 = np.asarray(point3)

ab = np.asmatrix(point2 - point1)

ac = np.asmatrix(point3 - point1)

n = np.cross(ab, ac) # 向量叉乘,求法向量

# ax+by+cz

ax = n[0, 0]

by = n[0, 1]

cz = n[0, 2]

d = -(ax * point1[0] + by * point1[1] + cz * point1[2])

return ax, by, cz, d

def point2area_distance(point1, point2, point3, point4):

""":param point1:資料框的行切片,三維

:param point2:

:param point3:

:param point4:

:return:點到面的距離

"""ax, by, cz, d = define_area(point1, point2, point3)

mod_d = ax * point4[0] + by * point4[1] + cz * point4[2] + d

mod_area = np.sqrt(np.sum(np.square([ax, by, cz])))

d = abs(mod_d) / mod_area

return d

if __name__ == '__main__':

# 初始化資料

point1 = [2, 3, 1]

point2 = [4, 1, 2]

point3 = [6, 3, 7]

point4 = [-5, -4, 8]

# 計算點到面的距離

d1 = point2area_distance(point1, point2, point3, point4) # s=8.647058823529413

print("點到面的距離s: " + str(d1))

點到平面的距離公式

ax by cz d 0 其中n a,b,c 是平面的法向量,d是將平面平移到座標原點所需距離 所以d 0時,平面過原點 給定乙個向量v x,y,z 則 v sqrt x x y y z z 給定兩個向量v1 x1,y1,z1 和v2 x2,y2,z2 則他們的內積是 v1v2 x1x2 y1y2 ...

點到平面的距離公式

ax by cz d 0 其中n a,b,c 是平面的法向量,d是將平面平移到座標原點所需距離 所以d 0時,平面過原點 給定乙個向量v x,y,z 則 v sqrt x x y y z z 給定兩個向量v1 x1,y1,z1 和v2 x2,y2,z2 則他們的內積是 v1v2 x1x2 y1y2 ...

點到超平面的距離

首先說一下採用向量法計算點到平面的距離 設圖中平面的方程為ax by cz d 0,點m0的座標為 x0,y0,z0 點m1的座標為 x1,y1,z1 求m1到平面的距離。解 其中a為向量m0m1與平面法向量之間的夾角,對於平面ax by cz d 0,該平面的乙個法向量n為 a,b,c 由於 因此...