3

(-6/35)我用计算了 的角度atan2(-6/35)。结果是-9.7275785514016047

现在要回来,我使用了维基百科的公式

在此处输入图像描述

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

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

我希望得到坐标(-6/35) 但我得到了 ( -33.895012797701419/10.589056022311761)

所以我认为这是错误的,因为atan2定义在4 个象限上,sin并且cos只定义在2个象限上。

这个对吗?怎么做才对?

编辑:

现在,首先我很抱歉以糟糕的方式描述我的问题。我实际上做了以下

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

2 回答 2

4

为了既使用 atan2 函数获取角度,然后使用 sin & cos 返回笛卡尔坐标,您需要稍微不同地使用它们,正如您已经说过的。

正如 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}
于 2015-12-04T11:29:06.987 回答
2

你的使用atan2方式不对。的函数声明atan2为:

double atan2 (double y, double x);

所以角度是:

double angle = atan2(35, -6); // 1.74057 radians or 99.72758 degree
于 2015-12-04T11:22:00.717 回答