Math 数据增量的计算

Math 数据增量的计算,math,interpolation,delta,Math,Interpolation,Delta,我正在编写一个服务器,它每300ms向客户端发送一个游戏对象的坐标缓冲区。但我不想每次都发送完整的数据。例如,假设我有一个数组,其中的元素随时间变化: 0 0 100 50 -100 -50 at time t 0 10 100 51 -101 -50 at time t + 300ms 您可以看到,只有第二、第四和第五个元素发生了更改 不发送所有元素,只发送增量的正确方法是什么?理想情况下,我想要一个函数,它第一次返回完整数据,在没有更改时返回空数据 谢谢。有很多选择。若大多数数

我正在编写一个服务器,它每300ms向客户端发送一个游戏对象的坐标缓冲区。但我不想每次都发送完整的数据。例如,假设我有一个数组,其中的元素随时间变化:

0 0 100 50 -100 -50 at time t 0 10 100 51 -101 -50 at time t + 300ms 您可以看到,只有第二、第四和第五个元素发生了更改

不发送所有元素,只发送增量的正确方法是什么?理想情况下,我想要一个函数,它第一次返回完整数据,在没有更改时返回空数据


谢谢。

有很多选择。若大多数数据并没有改变,那个么只需发送已改变元素的索引、值对即可。如果大多数值发生变化,但变化很小,请计算增量和gzip或运行长度编码,或许多其他可能的结果。

有很多选项。若大多数数据并没有改变,那个么只需发送已改变元素的索引、值对即可。如果大多数值发生变化,但变化很小,请计算增量和gzip或运行长度编码,或许多其他可能的结果。

您是否希望优化效率,或者这是一个学习练习?一些想法:

除非有很多数据,否则每次发送所有数据可能是最容易的,也不是非常低效

如果每次都为所有数据点发送增量,则为未更改的点发送零而不是重新发送以前的值不会节省太多

如果只发送更改点的数据,则需要为每个值提供索引。例如,如果第3点增加5,第8点减少2,那么您可能会发送3 5 8-2。但是现在,因为你为每一个改变的点发送两个值,只有当少于一半的点改变时,你才会赢

与传输更新的速率相比,如果值的变化相对缓慢,则可以通过传输每个数据点的增量来提高效率,但只使用少量位。例如,使用4位可以将值从-8传输到+7。只要delta永远不大于这个值,或者在它们赶上实际值之前传输几个delta是可以的,那么这就行了

可能不值得使用两种不同的机制:一种发送初始值,另一种发送增量。如果您能够容忍延迟,那么为每个点假设一些恒定的初始值,然后只传输增量可能更有意义


您是希望优化效率,还是这是一个学习练习?一些想法:

除非有很多数据,否则每次发送所有数据可能是最容易的,也不是非常低效

如果每次都为所有数据点发送增量,则为未更改的点发送零而不是重新发送以前的值不会节省太多

如果只发送更改点的数据,则需要为每个值提供索引。例如,如果第3点增加5,第8点减少2,那么您可能会发送3 5 8-2。但是现在,因为你为每一个改变的点发送两个值,只有当少于一半的点改变时,你才会赢

与传输更新的速率相比,如果值的变化相对缓慢,则可以通过传输每个数据点的增量来提高效率,但只使用少量位。例如,使用4位可以将值从-8传输到+7。只要delta永远不大于这个值,或者在它们赶上实际值之前传输几个delta是可以的,那么这就行了

可能不值得使用两种不同的机制:一种发送初始值,另一种发送增量。如果您能够容忍延迟,那么为每个点假设一些恒定的初始值,然后只传输增量可能更有意义


在实际工程中应进行优化。我要从足球赛中发出coords。客户数量约为10万。这就是为什么即使是几个字节也会优化很多。完整列表中有多少个坐标?压缩数据有很多好方法,但一般来说,最好先让代码正常工作,然后在决定是否值得优化之前对其进行基准测试。因此,最坏的情况是,传输的数据量刚刚超过40字节。以太网和TCP报头的开销约为64字节,因此压缩数据并没有真正的优势。在实际项目中应该进行优化。我要从足球赛中发出coords。客户数量约为10万。这就是为什么即使是几个字节也会优化很多。完整列表中有多少个坐标?压缩数据有很多好方法,但一般来说,最好先让代码正常工作,然后在决定是否值得优化之前对其进行基准测试。因此,最坏的情况是,传输的数据量刚刚超过40字节。以太网和TCP报头的开销约为64字节,因此压缩数据没有真正的优势。