如何反转创建球面坐标的公式?

时间:2015-04-12 01:47:05

标签: math three.js

我有一个公式,可以将空间中的随机点映射到位于球体中的点。我希望能够反转这个公式,以便再次得到空间中的随机点。

我的unspherize()功能无效。请告诉我扭转表格的正确方法。

function spherize(x,y,z){
  var d = 1 / Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2) + Math.pow(z, 2));
  x *= d;
  y *= d;
  z *= d;
  return {x: x, y: y, z: z}
}

function unspherize(x,y,z){
  var d = 1 * Math.pow(Math.sqrt(x) + Math.sqrt(y) + Math.sqrt(z), 2)
  x /= d;
  y /= d;
  z /= d;
  return {x: x, y: y, z: z}
}

2 个答案:

答案 0 :(得分:1)

有无数个点被映射到球体上的相同点(例如,对于每个(x,y,z),点(2x,2y,2z)被映射到相同的向量)。因此,如果您不保存向量长度d,则操作不可逆。

答案 1 :(得分:0)

使用r作为点(x,y,z)的半径或欧几里德范数,

x /= 1+r
y /= 1+r
z /= 1+r

在球体内部给出一个点。由于这种转换是双射的,因此可以颠倒,对于球体内的任何一点,"非编纂的"获得点为

x/= 1-r
y/= 1-r
z/= 1-r