Сценарий таков, что пользователь перетаскивает объект на сенсорном экране. Я хочу рассчитать положение объекта, когда палец тянет его по экрану. Я также хочу учесть любое ускорение от скорости пальца и замедлить объект, когда пользователь разрешает go объекта.
Аналогично представлению сетки приложения Apple Watch. Здесь перемещаемым «объектом» является вся сетка приложений. ![apple watch view](https://i.stack.imgur.com/6XQfn.gif)
На нерегулярных, но частых интервалах мне дают прикосновение. Событие касания состоит из двух частей информации x
и t
.
, где x
- это положение пальца в пикселях, а t
- это отметка времени в миллисекундах.
(мне также дано y
, но давайте пока проигнорируем это).
Например,
x | t
157 | 684
164 | 685
171 | 695
177 | 702
182 | 710
189 | 721
196 | 727
202 | 739
208 | 745
214 | 755
221 | 762
235 | 779
242 | 790
250 | 796
258 | 805
266 | 815
274 | 822
283 | 832
291 | 840
301 | 848
318 | 868
При первом событии объект неподвижен, поэтому я используйте это событие, поскольку исходная исходная позиция и скорость 0
.
. Для всех последующих событий я вычисляю новую позицию объекта следующим образом:
object.x = event.x - prevEvent.x + object.x
Я могу вычислить ускорение в любой точке как
a = (event.velocity - prevEvent.velocity) / t
Где event.velocity
равно
event.velocity = (event.x - prevEvent.x) / t
Как использовать это ускорение для рассчитать новую позицию? И как мне объяснить трение и замедление?
Я смутно помню Уравнения SUVAT из 10 лет go, и у меня приятный ренессанс моего подросткового физика, но у меня нет пока нет решения.
Я бы с удовольствием взял подсказки, если вы чувствуете, что я близок к ответу.