Я создал две анимации, которые состоят из сфер, движущихся в перспективном проецируемом трехмерном пространстве, что означает, что размер и скорость сфер изменяются с расстоянием: они увеличиваются, когда они ближе к зрителю (камере), и уменьшаются, когда они уходят подальше от зрителя. Обе анимации воспроизводятся на компьютерном 2D-экране.
В Анимация случайного движения сферы движутся случайным образом в разных направлениях (GIF 1). В моем коде я вычислил их сферические координаты (phere.position.xyz) с двумя углами тэта и фи (см. Ниже формулы, используемые для положения и их производных).
В Opti c Flow Animation , это камера, которая движется вдоль оси z (camera_z - = .1), а сферы не двигаются (GIF 2).
В контексте нейробиологических исследований c эксперимент, мне нужно сопоставить восприятие скорости между двумя анимациями, поэтому мне нужно сначала вычислить скорость 2D в обеих анимациях (к 2D я имею в виду экранные координаты , а не мир координаты). Каковы соответствующие формулы скорости для каждой анимации? Соответствует ли скорость каждой сферы в расчете потока opti c скорости камеры?
Как я генерировал координаты сфер в анимации 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