在笛卡尔坐标系和球坐标系之间转换

3
我需要在JavaScript中转换笛卡尔坐标系和球坐标系。 我浏览了一下论坛,但没有找到我需要的内容。
现在我有这个:
this.rho = sqrt((x*x) + (y*y) + (z*z));
this.phi = tan(-1 * (y/x));
this.theta = tan(-1 * ((sqrt((x * x) + (y * y)) / z)));
this.x = this.rho * sin(this.phi) * cos(this.theta);
this.y = this.rho * sin(this.phi) * sin(this.theta);
this.z = this.rho * cos(this.phi);

我使用了球坐标系直角坐标系转球坐标系计算器来获取我的公式。

但是我不确定我是否正确地将它们翻译成了代码。


1
你试过了吗?看看你是否得到了正确的结果? - Mark Reed
代码不是有效的,你需要在sqrt、tan和sin前面加上Math.*。你运行代码看结果是否正确了吗? - user1693593
@K3N 我正在使用可汗学院版本的JavaScript。我的程序没有错误,但是数学计算结果不正确。请在此处查看我的完整程序:http://www.khanacademy.org/computer-programming/spin-off-for-stack-overflow/5060721748606976 - Poplop
@PoplopZord 哦,好的。我正在添加 khan-acedemy 标签以使其更清晰。 - user1693593
@K3N 嗯,好的。我是新来的论坛用户,我应该早点说明的。 - Poplop
1个回答

7

有很多错误

要在整个范围内获得正确的Phi值,您必须使用ArcTan2函数:

this.phi = atan2(y, x);

对于Theta,使用反余弦函数:

this.theta = arccos(z / this.rho);

反向变换 - 您已经交换了 Phi 和 Theta:

this.x = this.rho * sin(this.theta) * cos(this.phi);
this.y = this.rho * sin(this.theta) * sin(this.phi);
this.z = this.rho * cos(this.theta);

非常感谢。我不得不使用acos而不是arccos,但我认为它们是一样的东西。我的心情现在感觉非常愉快。谢谢! - Poplop
为什么你的代码中没有 Math. 对象?为了简洁而省略了吗? - Tomáš Zato
1
@Tomáš Zato 因为我不懂JavaScript,也不确定它的标准库中有哪些函数。 - MBo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接