python-3.x - 在 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)
阴谋
这是我得到的最后一个情节,这显然是错误的。我在这里找不到错误。
解决方案
这里有多重误解。你有两个平面,方程 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()
这个图是制作出来的
推荐阅读
- cmake - qbs 找不到子模块的输出(使用 cmake 构建)
- java - Android Studio 3.1.2 - Lombok 抛出错误并要求不存在的选项
- php - 将输入数据发送到 yii1 上的模型属性时出错
- python - jupyter notebook(Conda)中的python版本冲突
- android - 未通过 JSON 解析获取数据
- c++ - 我该如何解决这个错误?“方法'str'无法解析”
- powershell - Powershell不断发送密钥
- javascript - 原始字符串到普通字符串 javascript
- python - 使用python从多个zip文件中提取注释
- sql - 如何获取在 SQL 中具有重复列组合的记录?