有没有办法将两个角度压缩为2个字节?

时间:2017-12-27 20:28:33

标签: algorithm math bit-manipulation

在我的应用程序中,我经常使用包含两个球面坐标整角的数据。它们是phi(0 <= phi <360度)和θ(0 <=θ<= 180度)。有没有办法将这些角度压缩成2个字节?我找到了将它们压缩为17位的解决方案 - 这对我来说已经足够了,但也许有任何算法可以将它们压缩为16位?不幸的是,我不知道这个领域的具体算法(如压缩理论)

2 个答案:

答案 0 :(得分:6)

是的,您可以这样做:将第一个角度phi乘以181,然后添加第二个角度theta。结果将适合无符号的16位整数:

uint16_t compressed = 181 * phi + theta;

考虑到你的约束,你得到的最高数字是65159(359 * 181 + 180),这几乎不到2 16 -1(65535)。

答案 1 :(得分:4)

如果phitheta的值是您的范围内的整数,则有phi的360个可能值和theta的181个可能值。您可以使用表达式

将它们组合为0到65159之间的单个值
phi * 181 + theta

在范围内给定{&#34}压缩值n,您可以使用

取回原始值
phi = n // 181
theta = n % 181

请注意,这些值将适合无符号 16位整数,允许0到65535,但不能进行签名,无需进一步处理。