Как найти размер сетки по координатам центра ячейкиPython

Программы на Python
Anonymous
Как найти размер сетки по координатам центра ячейки

Сообщение Anonymous »

У меня есть вычислительная сетка октодерева, как показано на прилагаемой диаграмме.
Изображение

Синяя сетка представляет собой куб с длиной стороны 1, красная сетка имеет длину стороны 0,5, а зеленая сетка имеет длину стороны 0,25. . Координаты центров ячеек для каждой сетки указаны ниже.
cellcenters.csv

Код: Выделить всё

0.5,0.5,0.5
0.5,1.5,0.5
1.5,1.5,0.5
1.5,0.5,0.5
0.5,0.5,1.5
0.5,1.5,1.5
1.5,1.5,1.5
1.5,0.5,1.5
1.25,0.25,1.25
1.25,0.25,1.75
1.25,0.75,1.25
1.25,0.75,1.75
1.75,0.25,1.25
1.75,0.25,1.75
1.75,0.75,1.25
1.75,0.75,1.75
1.125,0.125,1.125
1.125,0.125,1.375
1.125,0.375,1.125
1.125,0.375,1.375
1.375,0.125,1.125
1.375,0.125,1.375
1.375,0.375,1.125
1.375,0.375,1.375
Теперь я хотел бы автоматически рассчитать размер каждой сетки только на основе координат центра ячейки и визуализировать сетку. Я написал следующий код Python, но результат визуализации неверен, как показано во вложении.

Код: Выделить всё

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial import cKDTree

file_path = 'cellcenters.csv'
cell_centers_df = pd.read_csv(file_path, header=None, names=['x', 'y', 'z'])

def plot_cell_boundaries(ax, boundaries, color='b', label=None):
for boundary in boundaries:
x_min, x_max, y_min, y_max, z_min, z_max = boundary

ax.plot([x_min, x_max], [y_min, y_min], [z_min, z_min], color=color)
ax.plot([x_min, x_max], [y_max, y_max], [z_min, z_min], color=color)
ax.plot([x_min, x_max], [y_min, y_min], [z_max, z_max], color=color)
ax.plot([x_min, x_max], [y_max, y_max], [z_max, z_max], color=color)

ax.plot([x_min, x_min], [y_min, y_max], [z_min, z_min], color=color)
ax.plot([x_max, x_max], [y_min, y_max], [z_min, z_min], color=color)
ax.plot([x_min, x_min], [y_min, y_max], [z_max, z_max], color=color)
ax.plot([x_max, x_max], [y_min, y_max], [z_max, z_max], color=color)

ax.plot([x_min, x_min], [y_min, y_min], [z_min, z_max], color=color)
ax.plot([x_max, x_max], [y_min, y_min], [z_min, z_max], color=color)
ax.plot([x_min, x_min], [y_max, y_max], [z_min, z_max], color=color)
ax.plot([x_max, x_max], [y_max, y_max], [z_min, z_max], color=color)

kdtree = cKDTree(cell_centers_df[['x', 'y', 'z']])
distances, indices = kdtree.query(cell_centers_df[['x', 'y', 'z']], k=2)

cell_sizes = distances[:, 1] / 2

def calculate_variable_size_cell_boundaries(df, sizes):
cell_boundaries = []

for i, row in df.iterrows():
x_center, y_center, z_center = row['x'], row['y'], row['z']
cell_size = sizes[i]

x_min, x_max = x_center - cell_size, x_center + cell_size
y_min, y_max = y_center - cell_size, y_center + cell_size
z_min, z_max = z_center - cell_size, z_center + cell_size

cell_boundaries.append([x_min, x_max, y_min, y_max, z_min, z_max])

return np.array(cell_boundaries)

variable_cell_boundaries = calculate_variable_size_cell_boundaries(cell_centers_df, cell_sizes)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

plot_cell_boundaries(ax, variable_cell_boundaries, color='b')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Cell Boundaries (Wrong)')

plt.show()
Изображение

Если вам известен какой-либо алгоритм или метод расчета размера сетки по координатам центра ячейки, я был бы очень признателен за ваш совет. Заранее спасибо.


Подробнее здесь: https://stackoverflow.com/questions/790 ... oordinates

Вернуться в «Python»