如何从atan2角度返回坐标
How to get back from atan2 angle back to Coordinate
我用atan2(-6/35)
计算了(-6/35)
的角度。
结果是 -9.7275785514016047
.
现在回来,我使用了 Wikipedia
中的公式
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;
}
您使用 atan2
的方式有误。 atan2
的函数声明为:
double atan2 (double y, double x);
所以角度是:
double angle = atan2(35, -6); // 1.74057 radians or 99.72758 degree
为了同时使用 atan2 函数获取角度然后使用 sin 和 cos 返回笛卡尔坐标,您需要稍微不同地使用它们,正如您已经说过的。
正如 LightnessRacesInOrbit 和 user38034 所说,atan2 函数有两个参数。第一个是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}
我用atan2(-6/35)
计算了(-6/35)
的角度。
结果是 -9.7275785514016047
.
现在回来,我使用了 Wikipedia
中的公式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;
}
您使用 atan2
的方式有误。 atan2
的函数声明为:
double atan2 (double y, double x);
所以角度是:
double angle = atan2(35, -6); // 1.74057 radians or 99.72758 degree
为了同时使用 atan2 函数获取角度然后使用 sin 和 cos 返回笛卡尔坐标,您需要稍微不同地使用它们,正如您已经说过的。
正如 LightnessRacesInOrbit 和 user38034 所说,atan2 函数有两个参数。第一个是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}