北边的河 2021-04-05 10:44 采纳率: 50%
浏览 89
已采纳

已知o,p两点的三维坐标,且O为P点在某平面的投影,求平面公式

已知o,p两点的三维坐标,

且O为P点在某平面的投影,

求平面公式

方法或者python 代码等

 

  • 写回答

3条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2021-04-05 18:23
    关注

    思路如下:

    求出两个垂直于向量op的不共线的向量v1和v2,根据这两个向量得到点p1和p2,加上o点,通过三点得到平面方程的4个参数。

    # -*- coding: utf-8 -*-
    
    import numpy as np
    
    def get_ortho(op):
        """返回垂直于向量op的两个向量"""
        
        if not op.any(): # 向量op的每一个元素都是0
            return None
        
        i = np.where(op!=0)[0][0] # 向量op的第1个不为0的元素的索引号
        v1 = np.ones(op.shape, dtype=np.float64) # 构造一个元素全部为1的向量
        v2 = np.arange(op.size, dtype=np.float64) # 构造一个元素递增的向量
        v1[i] = 0 # 令第i个元素为0
        v2[i] = 0 # 令第i个元素为0
        v1[i] = -np.dot(op,v1)/op[i]
        v2[i] = -np.dot(op,v2)/op[i]
        
        return v1, v2
    
    def get_plane_by_three_point(p1, p2, p3):
        """根据三点坐标返回平面方程"""
        
        x1, y1, z1 = p1
        x2, y2, z2 = p2
        x3, y3, z3 = p3
        
        a = (y2-y1)*(z3-z1) - (y3-y1)*(z2-z1)
        b = (z2-z1)*(x3-x1) - (z3-z1)*(x2-x1)
        c = (x2-x1)*(y3-y1) - (x3-x1)*(y2-y1)
        d = a*x1 - b*y1 - c*z1
        
        return a, b, c, d
    
    def demo(o, p):
        """点o为点p在某平面的投影,计算该平面方程"""
        
        o = np.array(o)
        p = np.array(p)
        
        op = p - o
        v1, v2 = get_ortho(op)
        p1 = o + v1
        p2 = o + v2
        a, b, c, d = get_plane_by_three_point(p1, p2, o)
        
        print('%fx + %fy + %fz + %f = 0'%(a, b, c, d))
    
    if __name__ == '__main__':
        o, p = (0,0,0), (1,0,0)
        demo(o, p)
        o, p = (1,2,3), (3,5,2)
        demo(o, p)
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵