0

所以我正在处理一个 3-D 场景,我需要随意转换到极坐标和从极坐标转换,并编写了一个函数来帮助我转换。问题是它经常导致其中一个角度的 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 ...

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

艾萨克

4

2 回答 2

1

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

你的 phi 方程看起来不正确。看一下这个:

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

于 2012-12-22T21:15:00.347 回答
1

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

var phi = Math.atan2(y,x);
于 2012-12-22T21:40:50.853 回答