Как изменить эту функцию, которая рассчитывает угол между 2 точками - PullRequest
0 голосов
/ 17 января 2012

наконец, после долгих поисков, я нашел функцию, которую искал:

public double getAngle(Point centerCircle)
{
    double angle1= Math.atan2(centerCircle.y-this.y,centerCircle.x-this.x);
double angle2= Math.atan2(0,centerCircle.x-(centerCircle.x*2));
return Math.toDegrees(angle2-angle1);
}

извините, но я немного отсталый по математике, так что мне нужно изменить на эту функцию, чтобы она следовала:

, где 3 часа - 90 , а 12 часов - 180 градусов

вместо

, где 3 часа - 0 , а 12 часов - 90 градусов

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2013

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

1) Если вы ищете угол между двумя точками (с одной и той же начальной / центральной точкой), не имеет значения, в каком направлении находится точка 0/90/180/270, если они согласованы. Угол будет одинаковым независимо от ориентации.

2) Если вы ищете угол точки E в точке (ex, ey) с началом в точке (cx, cy) и 0 градусами, направленными вниз и увеличивающимися против часовой стрелки (как вы просили), то вы можете использовать формула в этот ответ , чтобы получить угол на основе 0 градусов = 3 часа. Затем добавьте 90 градусов, чтобы получить окончательный результат. (При необходимости вычтите 360).

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

getAngleBetweenAAndB(Point A, Point B){
  return abs(getAngle(A) - getAngle(B));
}
0 голосов
/ 17 января 2012

Если angle1 и angle2 в радианах, просто добавьте PI / 2, например:

return Math.toDegrees(angle2-angle1+(Math.PI/2));
...