首页 > 解决方案 > 在 mayavi 中绘制 2 个平面的交点

问题描述

我正在尝试渲染 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)

阴谋

伊姆古尔

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

标签: python-3.xmatplotlibmayavimayavi.mlab

解决方案


这里有多重误解。你有两个平面,方程 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()

这个图是制作出来的

在此处输入图像描述


推荐阅读