Найти угол и скорость для сенсорного события пользователя вокруг круга на Android - PullRequest
6 голосов
/ 28 апреля 2011

Математа снова пришла ко мне и победила меня.Мне нужна ваша помощь, чтобы перегруппироваться и снова атаковать.

Что у меня есть:

enter image description here

У меня есть вид с поверхности икруг как растровое изображение.Мне нужно повернуть растровое изображение, когда пользователь перемещает палец по краю круга.Чем быстрее пользователь скользит, тем больше мне нужно вращать изображение.Кажется простым, но не очень простым в реализации.

Что мне нужно

Мне нужно вычислить угол, на который нужно повернуть изображение в событии onDraw.Из того, что я до сих пор думал, мне нужны две вещи: - угол между новой точкой касания и старой.Я сделал простую функцию, которая позаботится об этом:

     private int getAngleBetweenTwoTouchedPoints(double oldX, double oldY, double newX, double newY)
     {
         return (int) Math.abs(Math.atan2(newY - oldY, newX - oldX));
     }

угол, возвращаемый этим, варьируется от 0 до 1, и я считаю, что это правильно.Увеличивая угол поворота изображения на это значение, я получаю медленное вращение, в основном на 1 единицу.Так что есть шанс поработать, но пока не нормально.Итак, второе, что мне может понадобиться, это скорость, с которой пользователь проводит пальцем по экрану.В общем, что-то вроде этого:

вращение + угол = угол наклона + скорость

Скорость или скорость, как я ее назвал, является проблемой в моем случае, учитывая, что я не двигаюсь только по Xили Y, но по кругу.Я понятия не имею, как рассчитать это.Я видел VelocityTracker на Android справке, но я не знаю, как это могло бы помочь.

Итак, подведем итоги: мне нужно иметь возможность поворачивать изображение, когда пользователь перемещает палец вокруг границы изображения.Еще проще, когда пользователь прекращает скольжение, пиксель изображения, который был ниже пальца при запуске слайда, должен быть таким же, когда слайд останавливается.

Любая помощь с благодарностью.Спасибо

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

У меня была та же задача, но для другой цели с углами.Я надеюсь, что эта ссылка может дать вам некоторую подсказку http://www.andengine.org/forums/post9226.html#p9226

Для разницы во времени вы пытались получить getTime () из класса Date между двумя разными кликами?

Надеюсь, это даст вам некоторое представление.

1 голос
/ 29 апреля 2011

Я подозреваю, что с учетом того, что «Еще проще, когда пользователь прекращает скольжение, пиксель изображения, который был ниже пальца при запуске слайда, должен быть таким же, когда слайд останавливается.», То, с чем вам может быть лучше, является абсолютнымповороты, а не относительные.

Увеличение поворота с каждым событием может привести к ошибкам, приводящим к тому, что растровое изображение не будет «прилипать» к пальцу.

Если вы просто отслеживаете начальные значениясобытие и последнее событие, затем всегда преобразуйте из начального представления в подходящее для последнего события, ваш код будет проще (без учета скорости) и будет вести себя лучше.

...