在Mayavi中绘制2个平面的交点

时间:2019-05-19 14:33:26

标签: python-3.x matplotlib mayavi mayavi.mlab

我试图渲染2个平面,然后在mayavi中渲染它们的相交线。

平面方程

x-5 * y + 2 * z -11 = 0

3 * x-2 * y + 3 * z -7 = 0

这两个平面相交的线是(我手动计算得出)-

11 * x-3 * y-13 * z-17 = 0

代码

%gui qt
from mayavi import mlab
import numpy as np
mlab.clf()

# first plane
x, y = np.mgrid[-100:100:1000j, -100:10:1000j]
z = (-x+5*y+11)/2
mlab.surf(x,y,z, warp_scale='auto',color=(0.1,0.2,0.3))

# second plane
x, y = np.mgrid[-100:100:1000j, -100:100:1000j]
z = (-3*x+2*y+7)/3
mlab.surf(x,y,z, warp_scale='auto')

# intersection line
x = np.linspace(-1000, 1000, num=4000)
y = np.linspace(-1000, 1000, num=4000)
z = (11*x-3*y-17)/13
mlab.points3d(x, y, z,scale_factor=0.95)

情节

Imgur

这是我得到的最后一个情节,这显然是错误的。我在这里找不到错误。

1 个答案:

答案 0 :(得分:0)

这里有多种误解。您有两个平面,方程x-5y + 2z -11 = 0和3x-2y + 3z-7 =0。说这两个平面相交的线遵循方程11x-3y-13z-17 = 0废话。这是平面的方程,而不是直线。即使您要查找的线包括在该平面中,您如何选择(x,y,z)?

此处的方法是注意,描述该线的所有(x,y,z)也描述了平面,然后针对一个平面根据另一个坐标表示一个坐标,最后将此坐标注入第二个平面方程中。这给出了

  

y =(-3x-19)/ 11

     

z =(-x + 5y + 11)/ 2

使用以下代码

from mayavi import mlab
import numpy
x, y = numpy.mgrid[-10:10:21*1j, -10:10:21*1j]
z = (-x + 5 * y + 11) / 2
zz = (-3 * x + 2 * y + 7) / 3
xx = numpy.linspace(-10, 10, 21)
yy = -3 / 11 * xx - 19 / 11
zzz = (-xx + 5 * yy + 11) / 2
mlab.surf(x, y, z)
mlab.surf(x, y, zz)
mlab.points3d(xx, yy, zzz)
mlab.show()

这个数字产生了

enter image description here