Как использовать Numpy в Ursina Python при детектировании пересечений
В Ursina выполняю поиск пересечений. В цикле всё работает. Пытаюсь применить Numpy, чтобы избавиться от цикла, но Ursina ругается на массивы. Как можно использовать функционал Numpy, чтобы не применять цикл?
from ursina import *
import numpy as np
app = Ursina()
cube_1 = Entity(model='cube', collider='box')
cube_2 = Entity(model='cube', collider='box')
cube_3 = Entity(model='cube', collider='box')
lst = []
lst.append(cube_2)
lst.append(cube_3)
for m in range(2):
if cube_1.intersects(lst[m]).hit:
print('intersects 1')
arr = np.asarray(lst)
np.where(cube_1.intersects(arr).hit == True)
Ответы (1 шт):
Пожалуй, numpy вам здесь не поможет. Метод intersect ожидает на вход объект сцены, а не массив, поэтому цикл - наиболее естественный способ.
Если вы настаиваете на numpy и без циклов, то нужно векторизовать метод intersect (не тестировал!):
np.where(np.vectorize(lambda scene: cube_1.intersects(scene).hit)(arr))
np.vectorize превращает обычную функцию в векторную.
Так как у массивов ndarray нельзя брать атрибуты объектов, то обращение к атрибуту hit приходится оборачивать в lambda.
Я подозреваю, что np.where в таких условиях будет медленнее цикла.