python实现点到平面的距离

Open3D 同时被 3 个专栏收录
5 篇文章 4 订阅
18 篇文章 1 订阅
6 篇文章 8 订阅

python实现点到平面的距离


目录

python实现点到平面的距离

1.三点定面

2.点到面的距离

3.python实现点到面的距离


关于点线面之间关系可以参考:平面方程与点到平面的距离_西檬饭-CSDN博客_点到平面距离

1.三点定面

空间上任意三个不共线的点,可以确定一个平面,三点定面的例子:

2.点到面的距离

点到面的距离,可参考这个例子

3.python实现点到面的距离

空间上不共线的三个点P1,P2,P3确定一个平面,计算空间上某个点P4到{P1,P2,P3}组成的平面的距离,可如下计算

import numpy as np

def define_area(point1, point2, point3):
    """
    法向量    :n={A,B,C}
    空间上某点:p={x0,y0,z0}
    点法式方程:A(x-x0)+B(y-y0)+C(z-z0)=Ax+By+Cz-(Ax0+By0+Cz0)
    https://wenku.baidu.com/view/12b44129af45b307e87197e1.html
    :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))

  • 3
    点赞
  • 0
    评论
  • 17
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值