笛卡尔坐标到极坐标导致NaN

时间:2012-12-22 21:12:08

标签: javascript math 3d three.js polar-coordinates

所以我正在研究一个三维场景,我需要随意转换到极坐标和从极坐标转换,并编写了一个函数来帮助我转换。问题在于它导致其中一个角度的NaN非常规律。我正在使用的功能如下:

toPolar: function(x,y,z){
    var sqrd = (x*x)+(y*y)+(z*z)
    var radius = Math.pow(sqrd,.5)
    var theta = Math.acos(z/radius)
    var phi = Math.asin(y/x)
    var toReturn={
        r:radius,
        t:theta,
        p:phi
    }
    return toReturn
}

Phi是返回NaN的东西,虽然我虽然知道它导致NaN的位置,但似乎它在整个场景中的某些点上发生了

您可以在此处查看问题: http://cabbibo.com/sketches/audioSketch3/

在左上角的位置,您可以看到相机的极坐标和笛卡尔坐标,极坐标(phi)的最后一部分将不时显示为NaN。

我认为我的数学存在某种问题,因为我不擅长它,但似乎它可能是一个不同的问题,比如我不理解如何使用Math.asin ...

感谢您的时间,如果有任何其他需要的信息,请告诉我们!

艾萨克

2 个答案:

答案 0 :(得分:1)

你不需要极坐标;你似乎想要球面坐标。

你的phi等式看起来不正确。看看这个:

http://en.wikipedia.org/wiki/Spherical_coordinate_system

答案 1 :(得分:1)

如果你期望phi像方位角(例如在水平面上,-pi - > pi),你应该使用atan2。

var phi = Math.atan2(y,x);