Несколько ответов здесь пытались объяснить проблему «экрана», где top left
- это 0,0
, а bottom right
- (положительно) screen width, screen height
. Большинство сеток имеют положительную ось Y
выше X
, а не ниже.
Следующий метод будет работать со значениями экрана вместо значений «сетки». Единственное отличие от исключенного ответа - значения Y
инвертированы.
<code>/**
* Work out the angle from the x horizontal winding anti-clockwise
* in screen space.
*
* The value returned from the following should be 315.
* <pre>
* x,y -------------
* | 1,1
* | \
* | \
* | 2,2
*
* @param p1
* @param p2
* @return - двойной от 0 до 360
* /
public static double angleOf (PointF p1, PointF p2) {
// ПРИМЕЧАНИЕ. Помните, что у большинства математик ось Y положительна над X.
// Тем не менее, для экранов у нас есть Y как положительный ниже. По этой причине,
// значения Y инвертируются для получения ожидаемых результатов.
окончательный двойной deltaY = (p1.y - p2.y);
окончательный двойной deltaX = (p2.x - p1.x);
окончательный двойной результат = Math.toDegrees (Math.atan2 (deltaY, deltaX));
возврат (результат