我试图渲染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)
情节
这是我得到的最后一个情节,这显然是错误的。我在这里找不到错误。
答案 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()
这个数字产生了