2016-11-01 4 views
0

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

Ilustration

После прибегая к помощи на некоторое время, я нашел Law of cosines.

Так что я придумал следующий код:

final float x = e.getX() - v.getWidth()/2; 
final float y = e.getY() - v.getHeight()/2; 

final float a = PointF.length(x, y); 
final float b = PointF.length(x_, y_); 
final double c = Math.sqrt(Math.pow(x - x_, 2) + Math.pow(y - y_, 2)); 

final double alpha = Math.toDegrees(Math.acos((Math.pow(a , 2) + Math.pow(b, 2) - Math.pow(c, 2))/(2 * a * b))); 

Это похоже на работу. Но у него есть одна большая проблема. Угол всегда положительный. Но мне нужно знать движение по часовой стрелке и против часовой стрелки. Таким образом, из пункта 1 в пункт 2 на иллюстрации будет +45, но от 2 до 1 будет -45. Любая идея, как это сделать?

ответ

-1

Вам нужно будет различать первый и второй щелчки. и посмотреть, как они относятся друг к другу. Выше/слева, ниже/справа и т. Д. затем используйте это в соответствии с вашей контрольной точкой. Угол не заботится о порядке нажатия. clock/countercheck do care

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