Преобразование поверхности куба в поверхность сферического куба (создание сферического куба) - PullRequest
0 голосов
/ 14 июля 2020

У меня есть координаты точек пустого куба, как показано ниже:

enter image description here

What I would like to do is transform that cube to something like this:

enter image description here

There are two options:

1- Edit the initial cube's coordinates to make it spherical

2- Generate spherical cube from scratch

I couldn't think of a solution so far. How can I generate a spherical cube?

Edit - My code that generates the cube is below. It basically creates a filled cube and then subtracts the nodes on the inside. NL_sph is the final array of the coordinates of the cube surface.


s = 0.1
m = 4
v = 3

b = np.linspace(s*(m+1),s*(m+v-1),v-1)
    
xi, yi, zi = np.meshgrid(b, b, b)
    
xi = np.array([xi.flatten('F')]).T
yi = np.array([yi.flatten('F')]).T
zi = np.array([zi.flatten('F')]).T
    
NL_inc = np.around(np.hstack([xi,yi,zi]), decimals = 5)


c = np.linspace(s*(m),s*(m+v),v+1)
    
xc, yc, zc = np.meshgrid(c, c, c)
    
xc = np.array([xc.flatten('F')]).T
yc = np.array([yc.flatten('F')]).T
zc = np.array([zc.flatten('F')]).T
    
NL_sph = np.around(np.hstack([xc,yc,zc]), decimals = 5)

for i in range(np.size(NL_inc,0)):
    
    idx = np.where((NL_sph == NL_inc[i,:]).all(axis=1))[0]
    
    if len(idx) != 0:
            
        NL_sph = np.delete(NL_sph, idx, axis = 0)

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Нарисуйте сетку на кубе граней и спроецируйте каждую точку, которая вам нужна, радиально на сферу. Считая центр куба в начале координат, преобразовать

(x, y, z) -> (x, y, z) / √(x² + y² + z²)
0 голосов
/ 14 июля 2020

Вероятно, одним из самых популярных решений этой проблемы является алгоритм Подразделения поверхности Катмулла-Кларка , который рекурсивно вычисляется.

Однако этот алгоритм «не подходит к реальной сфере как сфера - это quadri c. " В любом случае, этот алгоритм будет производить именно то, что изображено на прикрепленном вами изображении. Также обратите внимание: сначала вы должны создать простой куб, а затем деформировать его с помощью подразделения, так что вы начнете с 6 граней,

Пример подразделения с 0 градусов

, а затем Подразделение первой степени даст вам 24 грани,

Пример подразделения 1-й степени

с каждой из угловых вершин, перемещенных к центру, чтобы начать сферическую форму.

...