微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何绘制相交平面?

如何解决如何绘制相交平面?

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

dim = 10

X, Y = np.meshgrid([-dim, dim], [-dim, dim])
Z = np.zeros((2, 2))

angle = .5
X2, Y2 = np.meshgrid([-dim, dim], [0, dim])
Z2 = Y2 * angle
X3, Y3 = np.meshgrid([-dim, dim], [-dim, 0])
Z3 = Y3 * angle

r = 7
M = 1000
th = np.linspace(0, 2 * np.pi, M)

x, y, z = r * np.cos(th),  r * np.sin(th), angle * r * np.sin(th)

ax.plot_surface(X2, Y3, Z3, color='blue', alpha=.5, linewidth=0, zorder=-1)

ax.plot(x[y < 0], y[y < 0], z[y < 0], lw=5, linestyle='--', color='green',
        zorder=0)

ax.plot_surface(X, Y, Z, color='red', alpha=.5, linewidth=0, zorder=1)

ax.plot(r * np.sin(th), r * np.cos(th), np.zeros(M), lw=5, linestyle='--',
        color='k', zorder=2)

ax.plot_surface(X2, Y2, Z2, color='blue', alpha=.5, linewidth=0, zorder=3)

ax.plot(x[y > 0], y[y > 0], z[y > 0], lw=5, linestyle='--', color='green',
        zorder=4)

plt.axis('off')
plt.show()

结果

注意事项:

  • 我正在运行的版本与当前的主版本非常接近,因此我不确定在较旧的版本中将运行什么版本

  • 划分图的原因是,“上方”和“下方”是以某种不可思议的方式确定的(我不完全确定zorder实际执行任何操作),并且实际上取决于艺术家的绘制顺序。曲面不能相交(一个在每个位置都将在另一个上方),因此您需要分别在相交的两侧绘制剖面。(您可以在黑色线中看到这一点,而在上面的蓝色平面的“上方”,我并没有看到它的样子)。

  • 表面的“正确”排序似乎也取决于视角。

解决方法

我想使用matplotlib或多或少地绘制下面的图形,其中包括两个相交的平面,这些透明平面具有适当的透明度,指示它们的相对方向,以及两个平面中以2D投影的圆和向量。

我不确定是否有用于执行此操作的现有程序包,是否有任何提示?图片来源:M
Strassler

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。