マッピングを使用して、立方体の表面上の点を球に変換しています。
得られた球の表面と、立方体のエッジがマップされている線をプロットしたいと思います。
これまでのところ、一度に立方体の 1 つの面で作業して、次のことを試しました。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def sphere_mapping(xbar,ybar,zbar):
xx = xbar**2
yy = ybar**2
zz = zbar**2
x = xbar*np.sqrt(1 - yy/2 - zz/2 + yy*zz/3)
y = ybar*np.sqrt(1 - xx/2 - zz/2 + xx*zz/3)
z = zbar*np.sqrt(1 - xx/2 - yy/2 + xx*yy/3)
return x,y,z
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d',aspect='equal')
sgrd1,sgrd2 = np.meshgrid(np.linspace(-1,1,100),np.linspace(-1,1,100))
sgrd3 = np.ones((100,100))
lgrd1 = np.hstack([np.linspace(-1,1,100),np.ones(100,),np.linspace(1,-1,100),-np.ones(100,)])
lgrd2 = np.hstack([np.ones(100,),np.linspace(1,-1,100),-np.ones(100,),np.linspace(-1,1,100)])
lgrd3 = np.ones(400,)
# Plot surface
# x=+1
x,y,z=transform(fgrd3,fgrd1,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# y=+1
x,y,z=transform(fgrd1,fgrd3,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# x=-1
x,y,z=transform(-fgrd3,fgrd1,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# y=-1
x,y,z=transform(fgrd1,-fgrd3,fgrd2)
ax.plot_surface(x,y,z,linewidth=0)
# z=+1
x,y,z=transform(fgrd2,fgrd1,fgrd3)
ax.plot_surface(x,y,z,linewidth=0)
# z=-1
x,y,z=transform(fgrd2,fgrd1,-fgrd3)
ax.plot_surface(x,y,z,linewidth=0)
# Plot lines
# x=+1
x,y,z=transform(lgrd3,lgrd1,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# y=+1
x,y,z=transform(lgrd1,lgrd3,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# x=-1
x,y,z=transform(-lgrd3,lgrd1,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# y=-1
x,y,z=transform(lgrd1,-lgrd3,lgrd2)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# z=+1
x,y,z=transform(lgrd2,lgrd1,lgrd3)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
# z=-1
x,y,z=transform(lgrd2,lgrd1,-lgrd3)
ax.plot_wireframe(x,y,z,linewidth=4,color='k')
plt.show()
これはある程度うまく機能します。球を取得し、エッジの太い黒い線を取得します。ただし、線は球の表面を通して表示されています。
単に を返すようにマッピングを変更するとxbar,ybar,zbar
、元の立方体と線が正しく表示されます。
私の線が球体で透けて見える理由とそれを修正する方法はありますか?