在我的应用程序中,我经常使用包含两个球面坐标整角的数据。它们是phi(0 <= phi <360度)和θ(0 <=θ<= 180度)。有没有办法将这些角度压缩成2个字节?我找到了将它们压缩为17位的解决方案 - 这对我来说已经足够了,但也许有任何算法可以将它们压缩为16位?不幸的是,我不知道这个领域的具体算法(如压缩理论)
答案 0 :(得分:6)
是的,您可以这样做:将第一个角度phi
乘以181,然后添加第二个角度theta
。结果将适合无符号的16位整数:
uint16_t compressed = 181 * phi + theta;
考虑到你的约束,你得到的最高数字是65159(359 * 181 + 180),这几乎不到2 16 -1(65535)。
答案 1 :(得分:4)
如果phi
和theta
的值是您的范围内的整数,则有phi
的360个可能值和theta
的181个可能值。您可以使用表达式
phi * 181 + theta
在范围内给定{&#34}压缩值n
,您可以使用
phi = n // 181
theta = n % 181
请注意,这些值将适合无符号 16位整数,允许0到65535,但不能进行签名,无需进一步处理。