Animation 计算透视投影动画中球体的二维速度

Animation 计算透视投影动画中球体的二维速度,animation,3d,velocity,perspectivecamera,Animation,3d,Velocity,Perspectivecamera,我创建了两个由在透视投影3D空间中移动的球体组成的动画,这意味着球体的大小和速度随距离而变化:当球体靠近观察者(相机)时,球体的大小和速度会增加,而当球体远离观察者时,球体的大小和速度会减小。这两个动画都在计算机2D屏幕上播放 在“随机运动”动画中,球体在不同方向随机移动(GIF 1)。在我的代码中,我用两个角度θ和φ计算了它们的球坐标(sphere.position.xyz)(参见下面用于位置及其导数的公式) 在光流动画中,是摄影机沿z轴移动(摄影机_z-=.1),球体不移动(GIF 2) 在

我创建了两个由在透视投影3D空间中移动的球体组成的动画,这意味着球体的大小和速度随距离而变化:当球体靠近观察者(相机)时,球体的大小和速度会增加,而当球体远离观察者时,球体的大小和速度会减小。这两个动画都在计算机2D屏幕上播放

在“随机运动”动画中,球体在不同方向随机移动(GIF 1)。在我的代码中,我用两个角度θ和φ计算了它们的球坐标(sphere.position.xyz)(参见下面用于位置及其导数的公式)

在光流动画中,是摄影机沿z轴移动(摄影机_z-=.1),球体不移动(GIF 2)

在神经科学实验的背景下,我需要匹配两个动画之间的速度感知,因此我需要首先计算两个动画中的2D速度(通过2D,我指的是屏幕坐标,而不是世界坐标)。每个动画各自的速度公式是什么?光流计算中每个球体的速度是否等于相机的速度

如何在随机动画中生成球体坐标:

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