Оптимизированный код Python с использованием массивов NumPy: нужен эффективный метод рисования точек на экране с использPython

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Оптимизированный код Python с использованием массивов NumPy: нужен эффективный метод рисования точек на экране с использ

Сообщение Гость »


Я новичок в Python, и у меня есть вопрос по поводу моего кода.

Я работал над проектом Python, где успешно оптимизировал свои вычисления с помощью массивов NumPy. В частности, я работаю над задачей 3D-рендеринга, где у меня есть набор 3D-точек, представляющих куб. Я оптимизировал преобразования и проекции с помощью NumPy, но возникает проблема с производительностью, когда я пытаюсь нарисовать эти точки на экране с помощью Pygame.

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

Мне нужен совет, как более эффективно изобразить эти точки без необходимости повторения вручную. Есть ли функция Pygame или метод NumPy, который мог бы помочь мне нарисовать эти точки более оптимизированным образом, избегая необходимости проходить через каждую точку отдельно?

вот мой код:

импортировать pygame pygame.init() время импорта импортировать numpy как np импорт математики экран = pygame.display.set_mode((1000, 1000)) часы = pygame.time.Clock() куб = np.array(((0, 0, 0), (0, 10, 0), (10, 10, 0), (10, 0, 0), ... )) y_rotation_matrix = np.array([[math.cos(0.01), 0, math.sin(0.01)], [0, 1, 0], [-math.sin(0.01), 0, math.cos(0.01)]]) Защиту Rotate_y_axis (points_array): Rotated_points_array = np.dot(points_array, y_rotation_matrix) вернуть Rotated_points_array проекция защиты (points_array): проецируемый_массив_точек = массив_точек[:, :2] / 10 вернуть projected_points_array защита Convert_to_pygame(points_list): x_pygame = 1000/2 + ((1/10) *points_list[:, 0]) * 1000/2 y_pygame = 1000/2 - ((1/10) *points_list[:, 1]) * 1000/2 pygame_points_xy = np.column_stack((x_pygame, y_pygame)) вернуть pygame_points_xy пока правда: start_time = время.время() screen.fill((255, 255, 255)) для события в pygame.event.get(): если event.type == pygame.QUIT: pygame.quit() куб = Rotate_y_axis (куб) Cube_projected = проекция (куб) pygame_xy = Convert_to_pygame(cube_projected) для точки в pygame_xy: pygame.draw.circle(экран, (0, 0, 0), точка, 2) pygame.display.flip() конечное_время = время.время() если конечное_время-начало_времени != 0: pygame.display.set_caption(str(1/ (end_time-start_time))) Я попытался передать массив xy_pygame в качестве входных данных для параметра центральной позиции в pygame.draw.circle(), но, к сожалению, этот подход не сработал.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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