所以我正在研究一个三维场景,我需要随意转换到极坐标和从极坐标转换,并编写了一个函数来帮助我转换。问题在于它导致其中一个角度的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 ...
感谢您的时间,如果有任何其他需要的信息,请告诉我们!
艾萨克
答案 0 :(得分:1)
答案 1 :(得分:1)
如果你期望phi像方位角(例如在水平面上,-pi - > pi),你应该使用atan2。
var phi = Math.atan2(y,x);