4

Мне нужно знать угол поворота в полярных координатах, используя X и Y из декартовых координат.Как преобразовать декартовы координаты в полярные координаты в JS?

Как это сделать в JS без множества утверждений IF? Я знаю, что могу это сделать, используя this system,

, но я думаю, что это будет плохо для производительности, потому что это в цикле анимации.

+1

Это будет достаточно справедливое усилие для любого, кто может провести мозговой штурм, пока у вас не появится что-то, что бы показалось, если у вас что-то началось. Итак, при запуске просто возьмите бумагу и вспомните все, что вам нужно, и создайте псевдокод/​​алгоритм без какой-либо логики программирования, а затем попытайтесь сформировать его в JS-код. Сначала это может быть грязно, но улучшения могут быть сделаны позже. Если возможно, вы можете сбросить соответствующий раздел кода, чтобы получить гораздо лучший ответ. :) – Rohit416

+0

@ Rohit416 Если бы я мог это сделать. Я сказал, что знаю, как это сделать, только используя конструкции. Я думаю, это очевидно, и я не пишу здесь этот алгоритм. Я прошу любые другие идеи, как решить эту проблему, возможно, математическую библиотеку в JS или что-то в этом роде. – levshkatov

+1

Да, объект 'Math' и его методы определенно помогут. [Вы смотрите на это] (http://stackoverflow.com/questions/8898720/cartesian-to-polar-coordinates)? – Rohit416

ответ

6

Javascript поставляется с встроенной функцией, которая делает то, что представлено на изображении: Math.atan2()

Math.atan2() принимает y, x в качестве аргументов и возвращает угол в радианах.

Например:

x = 3 
y = 4  
Math.atan2(y, x) //Notice that y is first! 

//returns 0.785398... radians, which is 45 degrees 

Я написал эту функцию для преобразования декартовых координат к полярным координатам, возвращая расстояние и угол (в радианах):

function cartesian2Polar(x, y){ 
    distance = Math.sqrt(x*x + y*y) 
    radians = Math.atan2(y,x) //This takes y first 
    polarCoor = { distance:distance, radians:radians } 
    return polarCoor 
} 

Вы можете использовать его как это для получения угла в радианах:

cartesian2Polar(5,5).radians 

Наконец, если вам нужны степени, вы можете конвертируйте радианы в такие градусы

degrees = radians * (180/Math.PI) 
Смежные вопросы