代码之家  ›  专栏  ›  技术社区  ›  hosoo

如何在python中找到平面方程

  •  0
  • hosoo  · 技术社区  · 2 年前

    我目前掌握的信息是平面(三维空间)的四个顶点坐标。A(X,Y,Z),B(X,Y-Z),C(X,Y/Z),D(X,yz) 我想用这些信息来求平面的方程。

    我找到了平面的法向量,但我找不到平面的方程,因为我不知道平面上一点的坐标。如果你能告诉我怎么做,我将不胜感激

    1 回复  |  直到 2 年前
        1
  •  1
  •   MBo    2 年前

    为了得到规范的平面方程,我们需要在平面上有三个不共线的点。

    首先,使用AB和AC矢量的矢量乘积计算法向矢量(您已经知道如何制作它了)。所以你有三个组成部分 (nx, ny, nz) -它们是平面方程的系数,但最后一个系数尚不清楚:

    nx*x + ny*y + nz*z + d = 0
    

    现在我们可以将任意一点(比如A)坐标代入平面方程,得到最后一个系数。(请注意,如果你需要平面上的任何点,你已经有了!)

    nx*ax + ny*ay + nz*az + d = 0
    d = -(nx*ax + ny*ay + nz*az)
    

    这就是全部

    def calc_plane(ax, ay, az, bx, by, bz, cx, cy, cz):
        abx = bx - ax
        aby = by - ay
        abz = bz - az
        acx = cx - ax
        acy = cy - ay
        acz = cz - az
        nx = aby * acz - abz * acy
        ny = abz * acx - abx * acz
        nz = abx * acy - aby * acx
        if nx==0 and ny==0 and nz==0:
            return None                 #collinear points case
        return (nx, ny, nz, -nx*ax-ny*ay-nz*az)
    
    print(calc_plane(1,0,0,0,1,0,0,0,1))
    print(calc_plane(1,-2,1,4,-2,-2,4,1,4))
    
    (1, 1, 1, -1)
    (9, -18, 9, -54)
    
        2
  •  0
  •   blunova    2 年前

    您也可以使用 scikit-spatial 库来获得平面的方程。如果有三个不共线的点,可以使用以下代码:

    from skspatial.objects import Plane
    plane = Plane.from_points([0, 0, 3], [1, 0, -4], [3, 3, -5])
    

    可以使用pip安装库: pip install scikit-spatial