使用两个浮点存储3D法向量的有效方法

时间:2015-03-25 09:27:51

标签: math data-structures 3d space-efficiency

我需要存储3D法向量,即(x, y, z)个向量x^2 + y^2 + z^2 = 1。但是由于空间限制,我只能使用2个浮点来存储它。 因此,通过仅存储xy,第三个分量可以计算为sqrt(1 - x^2 - y^2),即一个平方根,两个乘积和两个减法。

存储矢量的最有效方法是什么,以便尽可能快地读取它们,并且如果可能的话,不会偏向一个空间方向?

修改

现在将值(a, b)a = x - yb = x + y一起使用。

1 个答案:

答案 0 :(得分:1)

您可以通过球面坐标存储矢量来满足您的空间约束。众所周知,单位球面上的每个点,即每个单位矢量,都有至少一对表征它的球面坐标。


或者如果你想要复杂的东西:复杂的方形函数将单位磁盘映射到它的双重覆盖。因此,您可以将左半圆盘用于上半球,将右半圆盘用于下半球。

SphereFromDisk(a,b)
    a2=a*a; b2=b*b; r2=a2+b2; // assert r2 <= 1
    x = a2 - b2;
    y = 2*a*b
    z = sqrt(1-r2*r2)
    if(a<0 or (a=0 and b<0) z=-z
    return (x,y,z)