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

问题描述 投票:3回答:2

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

algorithm math bit-manipulation
2个回答
6
投票

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

uint16_t compressed = 181 * phi + theta;

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


4
投票

如果phitheta的值在您的范围内是整数,则有phi的360个可能值和theta的181个可能值。您可以使用表达式将它们组合为0到65159之间的单个值

phi * 181 + theta

给定“n在该范围内的压缩值,您可以使用以下值来恢复原始值

phi = n // 181
theta = n % 181

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

© www.soinside.com 2019 - 2024. All rights reserved.