Я создал 3D-анимацию с перспективной проекцией белых кругов, движущихся случайным образом в искусственном трехмерном пространстве, проецируемом на 2D-экран компьютера (GIF 1).
Поскольку мне нужно сохранить одинаковое количество видимых кругов, каждый раз, когда круг исчезает из рамки, я должен создать новый видимый круг в кадре. Для этого я написал этот фрагмент кода:
Сначала я создал начальные координаты и два угла движения (сферические координаты):
for circle in circles:
circle.position.xy = np.random.uniform(-25, 25, size=2)
z = np.random.uniform(near_z, far_z)
circle.position.z = z
circle.position.x *= z/-50
circle.position.y *= z/-50
circle.theta_deg = np.random.rand(1) * 360
circle.phi_deg = np.random.rand(1) * 360
theta_rad = circle.theta_deg * np.pi / 180
phi_rad = circle.phi_deg* np.pi / 180
circle.dx = speed * np.sin(-phi_rad - theta_rad) / frameRate
circle.dy = -speed * np.cos(phi_rad + theta_rad) / frameRate
circle.dz = -speed * np.cos(theta_rad) / frameRate
Затем в l oop, который воспроизводит анимацию и обновляет положение каждого круга, я поставил это условие после того же ответа, который был дан на тот же тип вопроса здесь :
max_dist = max(abs(circle.position.x),abs(circle.position.y))
limit_dist = 25 * abs((circle.position.z-near_z) / far_z)
z_rel = np.random.uniform(near_z,far_z)
if max_dist > limit_dist:
circle.position.x = np.random.uniform(-25, 25) * z_rel/far_z
circle.position.y = np.random.uniform(-25, 25) * z_rel/far_z
Я получил странный результат, как показано в GIF 2
Что не так с моим состоянием и как я могу обнаружить круг, который исчезает из рамки, и воссоздать его внутри рамки?