Вычисление сфер 2D-скоростей в перспективных анимациях - PullRequest
1 голос
/ 27 января 2020

Я создал две анимации, которые состоят из сфер, движущихся в перспективном проецируемом трехмерном пространстве, что означает, что размер и скорость сфер изменяются с расстоянием: они увеличиваются, когда они ближе к зрителю (камере), и уменьшаются, когда они уходят подальше от зрителя. Обе анимации воспроизводятся на компьютерном 2D-экране.

В Анимация случайного движения сферы движутся случайным образом в разных направлениях (GIF 1). В моем коде я вычислил их сферические координаты (phere.position.xyz) с двумя углами тэта и фи (см. Ниже формулы, используемые для положения и их производных).

В Opti c Flow Animation , это камера, которая движется вдоль оси z (camera_z - = .1), а сферы не двигаются (GIF 2).

В контексте нейробиологических исследований c эксперимент, мне нужно сопоставить восприятие скорости между двумя анимациями, поэтому мне нужно сначала вычислить скорость 2D в обеих анимациях (к 2D я имею в виду экранные координаты , а не мир координаты). Каковы соответствующие формулы скорости для каждой анимации? Соответствует ли скорость каждой сферы в расчете потока opti c скорости камеры?

enter image description here

enter image description here

Как я генерировал координаты сфер в анимации Random:

for sphere in spheres:

        sphere.position.xy = np.random.uniform(-25, 25, size=2)
        z = np.random.uniform(near_z, far_z)

        sphere.position.z = z
        sphere.position.x *= z/-50
        sphere.position.y *= z/-50

        sphere.theta_deg = np.random.rand(1) * 360
        sphere.phi_deg = np.random.rand(1) * 360

        theta_rad = sphere.theta_deg * np.pi / 180
        phi_rad = sphere.phi_deg* np.pi / 180

        sphere.dx = speed * np.sin(-phi_rad - theta_rad) / frameRate
        sphere.dy = -speed * np.cos(phi_rad + theta_rad) / frameRate
        sphere.dz = -speed * np.cos(theta_rad) / frameRate
...