Ваш код должен работать как есть. Возможно, вы захотите сначала вычислить координаты барицентра облака точек кадра и вывести скорость кадра из , что . Это быстрее и имеет преимущество, заключающееся в небольшом уменьшении распространения ошибок:
cx = 0;
cy = 0;
for point_number in range(0, number_of_points):
cx = cx + co_ordinates[frame_number][point_number][0][0]
cy = cy + co_ordinates[frame_number][point_number][0][1]
cx = cx / number_of_points;
cy = cy / number_of_points;
if frame_number > 0:
distance = math.sqrt((cx-prevx)**2 + (cy-prevy)**2)
# Calculate speed
prevx = cx;
prevy = cy;
Вы также можете рассчитать вращение между кадрами (так называемая регистрация из облаков точек ). Подход грубой силы должен был бы вычислить угол между каждой точкой и барицентром, затем угол между этой точкой и новым барицентром в следующем кадре и усреднить углы по всем точкам. Для жестких облаков это дает тот же результат, что и кватернионный подход.