Получить координаты X, Y из угла и расстояния (неверные значения, используя Math.cos () и Math.sin ()) - PullRequest
0 голосов
/ 21 декабря 2018

Я прочитал все принятые ответы по этой теме и повторил в точности логику, использованную в них, но мои результаты кажутся искаженными и «случайными».

Я правильно собрал X, Y и градусы изцентральный объект, как показано здесь:

console.log('deg' + degrees + ' - ' + 'x' + parseInt(x) + ', y' + parseInt(y));

enter image description here Примечание: Сетка X, Y простирается намного дальше от отображаемой области просмотра.Технически сетка не ограничена в размерах.Мы находимся в нашей собственной конкретной координате X, Y в этом пространстве сетки.

Теперь я хочу вычислить координату X, Y, которая находится на расстоянии 1000 пикселей от позиции щелчка.Вот пример того, чего я пытаюсь достичь:

enter image description here

Логика, которую я нашел в другом месте, должна быть такой простой:

x = 1000 * Math.cos(degrees);
y = 1000 * Math.sin(degrees);
console.log('deg' + degrees + ' - ' + 'x' + parseInt(x) + ', y' + parseInt(y));

Результат таков:

enter image description here

Проблема: Ясно на изображении выше, X,Координаты Y далеко от того, что я должен ожидать.Они слишком малы и слишком часто меняются на случайные числа.

Сетка для этого макета показана ниже:

enter image description here

Примечание: Ось X становится положительной влево.Это основная проблема или моя первоначальная логика неверна?

Спасибо, что рассмотрели мой вопрос


Я попробовал предложенный код.Вот мои результаты.

Результат от @ MBo's сейчас старый ответ:

new_x = 1000 * Math.cos(degrees * Math.PI / 180);
new_y = 1000 * Math.sin(degrees * Math.PI / 180);

enter image description here

результаты выглядят намного чище и менее «случайными», однако конец X, Y идут в неправильном направлении и на расстоянии

1 Ответ

0 голосов
/ 21 декабря 2018

и слишком часто меняются

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

 Math.cos(degrees * Math.PI / 180);
 Math.sin(degrees * Math.PI / 180);

Чтобы сделать поворот вокруг некоторой точки, добавьте эти значения к ее координатам

 x = center_object_x + Math.cos(degrees * Math.PI / 180);
 y = center_object_y + Math.sin(degrees * Math.PI / 180);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...