Python 在球体内创建球体
有没有可能创建一个像这样的图形?我不需要注释,也不需要线条。。仅球体的层[已填充。] 用matplotlib 编辑 我很想这么做,但我认为matplotlib不能正确显示图层 这是从上面来的 这是直接的角度 任何帮助, 多谢各位 编辑2 我设法用matlab做到了这一点Python 在球体内创建球体,python,matplotlib,geometry,Python,Matplotlib,Geometry,有没有可能创建一个像这样的图形?我不需要注释,也不需要线条。。仅球体的层[已填充。] 用matplotlib 编辑 我很想这么做,但我认为matplotlib不能正确显示图层 这是从上面来的 这是直接的角度 任何帮助, 多谢各位 编辑2 我设法用matlab做到了这一点 figure() hold on r=2 Rs = [1,2,3,4] l=0.95 colors = ['g','r','b'] for i=1:length(Rs) l = l-0.015 r = Rs
figure()
hold on
r=2
Rs = [1,2,3,4]
l=0.95
colors = ['g','r','b']
for i=1:length(Rs)
l = l-0.015
r = Rs(i)
colr = colors(i)
u = linspace(2*pi - l*2 * pi, l*2 * pi, 100);
v = linspace(0,pi, 100);
x = r * (cos(u)' * sin(v));
y = r * (sin(u)' * sin(v));
z = r * ones(length(u),1)* cos(v);
surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
hold on
x = [0*cos(u(end))'*sin(v); r* cos(u(end))'*sin(v)];
y = [0*sin(u(end))'*sin(v); r*sin(u(end))'*sin(v)];
z = [0*ones(length(u(end)),1)*cos(v);r*ones(length(u(end)),1)*cos(v)];
surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
x = [0*cos(u(1))'*sin(v); r* cos(u(1))'*sin(v)];
y = [0*sin(u(1))'*sin(v); r*sin(u(1))'*sin(v)];
z = [0*ones(length(u(1)),1)*cos(v);r*ones(length(u(1)),1)*cos(v)];
surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
end
axis equal
这是在python中实现的方法,但看起来不是很好
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')
r=2
u = np.linspace(0.2*np.pi, 0.8*2 * np.pi, 100)
v = np.linspace(0.2, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='g')
x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='g')
x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='g')
r=1
u = np.linspace(0.1*np.pi, 0.9*2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='yellow')
x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='yellow')
x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='yellow')
plt.draw()
plt.show()
这是如何在Matlab中实现的,效果很好
您应该将您的工作代码作为答案发布,这样就可以单独投票,这样这个问题就被标记为已回答。@Graham-done。
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')
r=2
u = np.linspace(0.2*np.pi, 0.8*2 * np.pi, 100)
v = np.linspace(0.2, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='g')
x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='g')
x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='g')
r=1
u = np.linspace(0.1*np.pi, 0.9*2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='yellow')
x = np.array([0*np.outer(np.cos(u[-1]), np.sin(v))[0],r*np.outer(np.cos(u[-1]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[-1]), np.sin(v))[0],r*np.outer(np.sin(u[-1]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[-1])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[-1])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='yellow')
x = np.array([0*np.outer(np.cos(u[0]), np.sin(v))[0],r*np.outer(np.cos(u[0]), np.sin(v))[0]])
y = np.array([0*np.outer(np.sin(u[0]), np.sin(v))[0],r*np.outer(np.sin(u[0]), np.sin(v))[0]])
z = np.array([0* np.outer(np.ones(np.size(u[0])), np.cos(v))[0], r*np.outer(np.ones(np.size(u[0])), np.cos(v))[0]])
ax.plot_surface(x, y, z, rstride =5,
cstride = 5, color ='yellow')
plt.draw()
plt.show()
figure()
hold on
r=2
Rs = [1,2,3,4]
l=0.95
colors = ['g','r','b']
for i=1:length(Rs)
l = l-0.015
r = Rs(i)
colr = colors(i)
u = linspace(2*pi - l*2 * pi, l*2 * pi, 100);
v = linspace(0,pi, 100);
x = r * (cos(u)' * sin(v));
y = r * (sin(u)' * sin(v));
z = r * ones(length(u),1)* cos(v);
surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
hold on
x = [0*cos(u(end))'*sin(v); r* cos(u(end))'*sin(v)];
y = [0*sin(u(end))'*sin(v); r*sin(u(end))'*sin(v)];
z = [0*ones(length(u(end)),1)*cos(v);r*ones(length(u(end)),1)*cos(v)];
surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
x = [0*cos(u(1))'*sin(v); r* cos(u(1))'*sin(v)];
y = [0*sin(u(1))'*sin(v); r*sin(u(1))'*sin(v)];
z = [0*ones(length(u(1)),1)*cos(v);r*ones(length(u(1)),1)*cos(v)];
surf(x,y,z,'faceColor',colr)%,'EdgeColor','none','LineStyle','none','FaceLighting','phong')
end
axis equal