Как можно контролировать автоматическое масштабирование в Mayavi? - PullRequest
0 голосов
/ 06 марта 2020

У меня есть код, который создает сферу tri angular me sh, и функция, которая периодически удваивает радиус сферы, однако, когда я создаю фигуру, изображение выглядит автоматически масштабированным, так что нет никакой визуальной разницы между сферы. Как я могу контролировать размер изображения, чтобы обеспечить визуальный рост.

import numpy as np
import trimesh
from mayavi import mlab
n_sub = 3

mesh = build_icosa(1.)

for i in range(n_sub):

    mesh = mesh.subdivide()

    n_vt = mesh.vertices.shape[0]

    for j in range(n_vt):
        mesh.vertices[j,:] /=  np.sqrt(np.sum(mesh.vertices[j,:]**2))

verts = mesh.vertices
triangles = mesh.faces

x = []
y = []
z = []

for i in range(len(verts)):
    x.append(verts[i][0])
    y.append(verts[i][1])
    z.append(verts[i][2])

r0 = np.sqrt(np.power(x,2) + np.power(y,2) + np.power(z,2))
phi0 = np.arctan2(y, x)
theta0 = np.arccos(np.divide(z,r0))

time = np.linspace(0,10,300)
#Double sphere radius
def rad_doub(x, y, z, t):

    r = np.sqrt(np.power(x,2) + np.power(y,2) + np.power(z,2))
    phi = np.arctan2(y, x)
    theta = np.arccos(np.divide(z,r))

    w = 2 * np.pi / 5

    for i in range(len(r)):
        r[i] = 1.5 + (.5*np.cos(w*t))

    x = r * np.sin(theta) * np.cos(phi)
    y = r * np.sin(theta) * np.sin(phi)
    z = r * np.cos(theta)

    return(x, y, z)

for i in range(len(time)):
    x,y,z = rad_doub(x, y, z, time[i])
    if i < 10:
        dex = '00'+str(i)
    elif 100 > i >= 10:
        dex = '0'+str(i)
    else:
        dex = str(i)

    mlab.options.offscreen = True
    sphere = mlab.triangular_mesh(x, y, z, triangles)
    mlab.savefig('sp'+dex+'.png')

, где `build_icosa 'создает икосоэдр, вписанный в сферу данного радиуса.

...