Есть ли способ заполнить одну сторону поверхности гироида с помощью Mayavi?
Я использую Mayavi для построения изоповерхности гироида. Моя проблема в том, что мне нужна более прочная структура, заполняя одну сторону двух созданных областей. На следующих изображениях вы можете увидеть, как выглядит моя сгенерированная изоповерхность и как она должна выглядеть после заполнения одной стороны.
Моя сгенерированная изоповерхность:
Как это должно выглядеть:
Изоповерхность может быть построена с помощью следующего уравнения:
U = sin(2*pi * x/a) * cos(2*pi * y/a) + sin(2*pi * y/a) * cos(2*pi * z/a) \
+ sin(2*pi * z/a) * cos(2*pi * x/a)
Я построил
iso-surface = 0
используя это:
mlab.contour3d(U, contours=[0])
Я надеюсь, что кто-нибудь сможет мне помочь.
1 ответ
С помощью vedo
:
from vedo import *
import numpy as np
a = 15
pi = np.pi
x, y, z = np.mgrid[:30, :30, :30]/a
U = sin(2*pi* x) * cos(2*pi* y) + sin(2*pi* y) * cos(2*pi* z) \
+ sin(2*pi* z) * cos(2*pi* x)
iso = Volume(U).isosurface(0)
plane = Grid(sx=29,sy=29, pos=(14.5,14.5,0), resx=200, resy=200)
cpln = plane.cutWithMesh(iso).wireframe(0).c('tomato').lw(0)
show(iso, cpln, axes=1)
(обратите внимание, что "шапочка" красного помидора - это фактически другая сетка)
PS: вы также можете использовать
CubicGrid(n=(29,29,29), spacing=(1,1,1), alpha=1)
(вместо 6 самолетов). Например:
iso = Volume(U).isosurface(0).smoothLaplacian().c('silver').lw(1)
cube = CubicGrid(n=(29,29,29), spacing=(1,1,1))
cube.cutWithMesh(iso).c('silver').alpha(1)
show(iso, cube)