python利用向量计算点到面的距离

该链接是利用向量计算点到面的距离的原理

# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd


def pointToArea(point1, point2, point3, point4):
    """
    描述:point4到point1, point2, point3所在面的距离
    :param point1:数据框的行切片,三维
    :param point2:
    :param point3:
    :param point4:
    :return:点到面的距离
    """
    # 设法向量(x,y,z)的x=1
    x = 1   # 法向量的x坐标
    p1 = point1.values  # 转化为矩阵
    p2 = point2.values
    p3 = point3.values
    p4 = point4.values

    v12 = p1 - p2  # p1到p2的向量
    v13 = p1 - p3  # p1到p2的向量
    X = np.vstack((v12, v13))  # 把向量v12、v13合并为2*3矩阵
    a = -X[:, 0]    # a的系数
    yz = np.matrix(X[:, 1:]).I.dot(a)  # X的逆矩阵乘以a
    y = yz[0, 0]    # 法向量的y坐标
    z = yz[0, 1]    # 法向量的z坐标
    n = np.array([x, y, z])  # 法向量
    v41 = p4 - p1  # p4到p1的向量
    return abs(v41.dot(n) / n.dot(n))

# 测试
if __name__ == '__main__':
    # 初始化数据
    df = pd.DataFrame([[2, 3, 1], [4, 1, 2], [6, 3, 7], [-5, -4, 8]], columns=['x', 'y', 'z'])
    point1 = df.loc[0]
    point2 = df.loc[1]
    point3 = df.loc[2]
    point4 = df.loc[3]
    # 计算点到面的距离
    s = pointToArea(point1, point2, point3, point4) # s=8.647058823529413
    print("点到面的距离s: " + str(s))
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

适当喝点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值