Как изменить масштаб вершин, чтобы они соответствовали определенному диапазону при сохранении соотношения сторон? - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь нормализовать вершины me sh, чтобы они помещались в ограничивающий прямоугольник в диапазоне от -0,5 до +0,5. Используя следующую логику c, я достиг этого:

# Calculate max and min values for each axis to
# get existing bounding box
x_max = np.max(vertices[:, 0])
y_max = np.max(vertices[:, 1])
z_max = np.max(vertices[:, 2])

x_min = np.min(vertices[:, 0])
y_min = np.min(vertices[:, 1])
z_min = np.min(vertices[:, 2])

# Calculate normalized vertices
normalized_x = 1 * (vertices[:, 0] - x_min) / (x_max - x_min) - 0.5
normalized_y = 1 * (vertices[:, 1] - y_min) / (y_max - y_min) - 0.5
normalized_z = 1 * (vertices[:, 2] - z_min) / (z_max - z_min) - 0.5

normalized_vertices = np.column_stack((normalized_x, normalized_y, normalized_z))

Однако моя проблема заключается в том, что, хотя мои вершины me sh теперь находятся в правильном диапазоне, соотношение сторон не сохраняется (так как более длинное измерение полностью раздавлено). Как бы я правильно масштабировал это так, чтобы мои точки по-прежнему находились в диапазоне от -0,5 до +0,5, но исходное соотношение сторон сохранялось?

1 Ответ

1 голос
/ 15 февраля 2020

Используйте наибольшее значение:

(x_max - x_min)
(y_max - y_min)
(z_max - z_min)

и разделите на это значение, допустим, оно равно max_value :

normalized_x = 1 * (vertices[:, 0] - x_min) / max_value - 0.5
normalized_y = 1 * (vertices[:, 1] - y_min) / max_value - 0.5
normalized_z = 1 * (vertices[:, 2] - z_min) / max_value - 0.5
...