1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python绘制三维图像球_python matplotlib:绘制具有周长的三维球体

python绘制三维图像球_python matplotlib:绘制具有周长的三维球体

时间:2020-08-13 11:53:22

相关推荐

python绘制三维图像球_python matplotlib:绘制具有周长的三维球体

在你展示的例子中,我不认为圆可以相互垂直(即一个是赤道,一个穿过北极和南极)。如果水平圆是赤道,那么北极一定在一条垂直线上的某个地方,这条垂直线穿过代表球体的黄色圆的中心。否则,赤道的右边看起来会比左边高或低。但是,表示极圆的椭圆只穿过黄色圆顶部和底部的中心线。因此,北极在球体的顶部,这意味着我们必须直视赤道,这意味着它应该看起来像一条线,而不是椭圆。

下面是一些代码,可以重现与您发布的图类似的内容:import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()

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

ax.set_aspect('equal')

u = np.linspace(0, 2 * np.pi, 100)

v = np.linspace(0, np.pi, 100)

x = 1 * np.outer(np.cos(u), np.sin(v))

y = 1 * np.outer(np.sin(u), np.sin(v))

z = 1 * np.outer(np.ones(np.size(u)), np.cos(v))

#for i in range(2):

# ax.plot_surface(x+random.randint(-5,5), y+random.randint(-5,5), z+random.randint(-5,5), rstride=4, cstride=4, color='b', linewidth=0, alpha=0.5)

elev = 10.0

rot = 80.0 / 180 * np.pi

ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b', linewidth=0, alpha=0.5)

#calculate vectors for "vertical" circle

a = np.array([-np.sin(elev / 180 * np.pi), 0, np.cos(elev / 180 * np.pi)])

b = np.array([0, 1, 0])

b = b * np.cos(rot) + np.cross(a, b) * np.sin(rot) + a * np.dot(a, b) * (1 - np.cos(rot))

ax.plot(np.sin(u),np.cos(u),0,color='k', linestyle = 'dashed')

horiz_front = np.linspace(0, np.pi, 100)

ax.plot(np.sin(horiz_front),np.cos(horiz_front),0,color='k')

vert_front = np.linspace(np.pi / 2, 3 * np.pi / 2, 100)

ax.plot(a[0] * np.sin(u) + b[0] * np.cos(u), b[1] * np.cos(u), a[2] * np.sin(u) + b[2] * np.cos(u),color='k', linestyle = 'dashed')

ax.plot(a[0] * np.sin(vert_front) + b[0] * np.cos(vert_front), b[1] * np.cos(vert_front), a[2] * np.sin(vert_front) + b[2] * np.cos(vert_front),color='k')

ax.view_init(elev = elev, azim = 0)

plt.show()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。