Java 更快的距离测量

Java 更快的距离测量,java,performance,distance,Java,Performance,Distance,我目前正在处理一个游戏,我需要将数据包从服务器发送到客户端,以便在客户端上产生某些粒子效果,但是,客户端只能在游戏中64立方单位半径范围内渲染这些粒子 为了避免向所有客户端发送数据包,我将测量客户端和粒子起源点之间的距离,但是将为每个客户端计算距离,并且应在不到一个游戏周期(50毫秒)内运行 粒子将随玩家的移动播放,并将发送到距离内的所有客户端,因此性能有点至关重要(考虑到多个玩家) 游戏API为两个位置之间的距离提供了以下公式(无平方根): 正方形(x1-x2)+正方形(y1-y2)+正方形(

我目前正在处理一个游戏,我需要将数据包从服务器发送到客户端,以便在客户端上产生某些粒子效果,但是,客户端只能在游戏中64立方单位半径范围内渲染这些粒子

为了避免向所有客户端发送数据包,我将测量客户端和粒子起源点之间的距离,但是将为每个客户端计算距离,并且应在不到一个游戏周期(50毫秒)内运行

粒子将随玩家的移动播放,并将发送到距离内的所有客户端,因此性能有点至关重要(考虑到多个玩家)

游戏API为两个位置之间的距离提供了以下公式(无平方根):

正方形(x1-x2)+正方形(y1-y2)+正方形(z1-z2)

我的想法是使用粒子作为中心点,在每个轴上创建一个长度为128的“长方体”,其缺点是位于拐角处的客户端不会渲染粒子,但会获得数据包,这浪费了一点带宽


问题是,使用欧几里德距离测量距离比简单地在粒子周围创建一个“盒子”并比较客户是否在里面要快?有没有其他方法可以更快地进行距离测量?

一种非常有效的方法是使用Oct树(三维四叉树)作为数据结构,尤其是对于大量的点

有关介绍,请参见

这是一个三维空间索引,允许您快速检索特定三维(矩形)范围内的点


如果要进一步减少点数,可以使用距离公式进一步过滤找到的点数;但是通过使用Oct树空间索引,点数应该已经显著减少了,因此不会从性能中减少太多。

0.x?你不是说x/10吗?@Charlie它不是一个
0
它是一个
o
,就像在其他对象位置一样。应该在帖子中说,加上你已经尝试过的代码,在客户端计算是不可取的。为什么不为此编写一个小测试程序并进行测量呢。