Найдите угол и скорость для события касания пользователя по кругу на Android

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

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

введите здесь описание изображения

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

Что мне нужно

Мне нужно рассчитать угол, на который нужно повернуть изображение в событии 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 единицу. Так что шанс работать есть, но пока не ок. - так вот, второе, что мне может понадобиться, это скорость, с которой пользователь проводит пальцем по экрану. Итак, в основном что-то вроде этого:

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

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

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

Любая помощь приветствуется. Спасибо


person Alin    schedule 28.04.2011    source источник
comment
Можете ли вы завершить потребность, можете ли вы дать более подробную информацию или код   -  person pengwang    schedule 04.05.2011


Ответы (2)


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

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

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

person Keith    schedule 29.04.2011

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

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

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

person Jana    schedule 28.04.2011