我有一个公式,可以将空间中的随机点映射到位于球体中的点。我希望能够反转这个公式,以便再次得到空间中的随机点。
我的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}
}
答案 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