Как получить координаты точки в системе координат на основе угла и расстояния

Как получить координаты точки в системе координат, когда у меня есть только исходные координаты (x, y) и угол от начала координат до точки и расстояние от начала координат до точки?

4 ответа

Решение

Ты используешь Math.cos, Math.sin как это:

pointX = x + distance * Math.cos(angle)
pointY = y + distance * Math.sin(angle)

Обратите внимание, что Math.cos а также Math.sin Предполагается, что аргумент приведен в радианах. Если у вас есть угол в градусах, вы бы использовали Math.cos(Math.toRadians(angle)) например.

Если d - это расстояние, а A - это угол, то координаты точки будут

(x+d*Cos(A), y+ d*Sin(A))

Если r это расстояние от происхождения и a это угол (в радианах) между осью x и точкой, которую вы можете легко рассчитать с помощью преобразования из полярных координат:

x = r*cos(a)
y = r*sin(a)

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

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

r = sqrt(x*2+y*2)
a = atan2(y,x)
px = x + r * cos(phi)
py = y + r * sin(phi)

где [px py] это точка, которую вы ищете, [x y] это "происхождение", r это расстояние и phi это угол к цели от начала координат.

РЕДАКТИРОВАТЬ: http://en.wikipedia.org/wiki/Polar_coordinate_system Эта ссылка, которая была любезно размещена Барт Киерс, может дать некоторую справочную информацию.

Короткий ответ

// math equations    
pointX = distance * cos(angle) + x  
pointY = distance * sin(angle) + y

// java code [angle in radian]
double pointX = distance * Math.cos(Math.toRadians(angle)) + x;  
double pointY = distance * Math.sin(Math.toRadians(angle)) + y;

Подробный ответ

Согласно диаграмме ниже

// finding pointX let's start by 
cos(angle) = (pointX - x) / distance
distance * cos(angle) =  (pointX - x)
(pointX - x) = distance * cos(angle)
pointX = distance * cos(angle) + x

// finding pointY let's start by 
sin(angle) = (pointY - y) / distance
distance * sin(angle) =  (pointY - y)
(pointY - y) = distance * sin(angle)
pointY = distance * sin(angle) + y

https://st ackru.com/images/ed6cbb36f937f6d166106fbd4f844e6a8243eaab.png

Другие вопросы по тегам