2015-12-04 9 views
0

Я вычислил угол (-6/35) с помощью atan2(-6/35). Результат -9.7275785514016047.Как вернуться из угла atan2 обратно в координату

Теперь, чтобы получить назад я использовал формулу из Wikipedia

enter image description here

distance = sqrt(6*6+35*35); 
angleRelativeToPatternOrigin = -9.7275785514016047; 

double x1 = distance * cos(angleRelativeToPatternOrigin); 
double y1 = distance * sin(angleRelativeToPatternOrigin); 

Я exptected получить coordinares (-6/35) Но я получил (-33.895012797701419/10.589056022311761)

Так что я думаю, что это неправильно поскольку atan2 определяется по квадранты и sin и cos определены только на .

Это правильно? Как это сделать правильно?

Edit:

Теперь, в первую очередь, я извиняюсь для описания моего вопроса в плохом смысле. я на самом деле сделал следующее

int main(int argc, char* argv[]) 
{ 
    int x = -6; 
    int y = 35; 
    double radian = atan2(x,y); // this was wrong. atan2(y,x) is correct. 
    double degree = radian * (360/(2 * 3.14159265358979323846)); 
    double distance = sqrt(6*6+35*35); 

    double x1 = distance * cos(degree); // Wrong because I used degree 
    double y1 = distance * sin(degree); // instead of radian 

    return 0; 
} 
+4

_ "Я вычислил угол (-6/35) с помощью' atan2 (-6/35) '' _ Нет, нет. Функция принимает два аргумента, а не один. –

+0

@ Планы горения на орбите Я использовал -6 как param one и 35 как param two –

+0

Это не то, о чем говорит ваш вопрос. –

ответ

3

Для того, чтобы как использовать функцию ATAN2, чтобы получить угол и затем использовать Sin & сов, чтобы вернуться к декартовым координаты, вам нужно использовать их несколько иначе, как вы уже сказали.

Как указано в LightnessRacesInOrbit и user38034, функция atan2 принимает 2 параметра. Первый - это y, второй - x.

Рассмотрим следующий фрагмент кода JS:

var x = -6.0; 
var y = 35.0; 

var at = Math.atan2(y, x); 
console.log(at); 

var dist = (x*x) + (y*y); 
dist = Math.sqrt(dist); 
console.log(dist); 

var x1 = dist * Math.cos(at); 
var y1 = dist * Math.sin(at); 

console.log({x:x1, y:y1}); 

Выход из этого фрагмента является:

1.740574600763235 
35.510561809129406 
Object {x: -5.999999999999998, y: 35} 
1

Вы используете atan2 в неправильном направлении. Функция декларации atan2 является:

double atan2 (double y, double x); 

Так угол:

double angle = atan2(35, -6); // 1.74057 radians or 99.72758 degree 
+0

Спасибо. Я изменил его, и теперь я получаю степень 99.72758, но координаты по-прежнему неправы (24.654041707636729 | 25.557351730531639) –

+0

@R_Valdez Как насчет того, что вы делаете, чтобы кто-то мог сказать вам, что в этом плохого, вместо того, чтобы надеяться, что они могут догадаться? –

+1

@R_Valdez Все тригонометрические функции в C++ (и любой язык, который я знаю) используют радианы, а не градусы. 'distance * cos (1.74057)' дает '-6' и' distance * sin (1.74057) 'дает' 35'. – user38034

 Смежные вопросы

  • Нет связанных вопросов^_^