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

LmT*_*oon 3 algorithm math bit-manipulation

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

das*_*ght 6

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

uint16_t compressed = 181 * phi + theta;
Run Code Online (Sandbox Code Playgroud)

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


Ror*_*ton 5

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

phi * 181 + theta
Run Code Online (Sandbox Code Playgroud)

给定一个“n范围内的压缩值,您可以使用以下命令取回原始值

phi = n // 181
theta = n % 181
Run Code Online (Sandbox Code Playgroud)

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