【问题标题】:Sustaining value in specified range指定范围内的维持值
【发布时间】:2012-06-19 12:58:54
【问题描述】:

假设我有一个点,它在 2d 平面上的位置。 这个点会随机改变它的位置,但这不是重点,所以让我们假设它有自己的速度,并且它在宽度和高度受限的平面上移动; 因此,经过一段时间的移动,该点将到达平面边界。 但是不能下飞机。

所以现在我可以检查每一帧的点位置,看看它是否达到了边界。

if(point.x>bound.xMax)point.x=bound.xMax

如果我想将自己传送到飞机的第二侧,我可以简单地:

point.x = point.x%bound.xMax;

但是我需要将点位置存储在整数中。

对于我的 corei7 1.6 上的 1000 万价值,两种解决方案 有类似的时间。 41 毫秒 vs 47 秒, 所以在这种情况下使用模函数是没有意义的,只检查值会更快。

但是,有什么技巧可以让它更快吗? 用于迭代数组的多线程方法不是解决方案。

也许我可以将我的绑定值缩放到一些奇怪的值,例如丢弃位置值的二进制解释的一部分。

如果有什么技巧可以做到,我认为有人在我之前做到了:) 您知道任何可以帮助我的解决方案吗?

【问题讨论】:

  • 在浮点值中,你不能只是“丢弃”二进制表示中的一些位,因为那样你只会丢失一些重要的数字。
  • 为什么不简单地使用fmod() 进行浮点取模呢?我很确定您无法在此类原始计算上进行更多优化

标签: c++ math assembly binary


【解决方案1】:

如果您可以通过某种方式在平面坐标周围添加信息,您可以很好地在平面周围创建一个“边界”,其中包含一个被标识为“超出边界”的值。例如,如果您有一个 10x10 的板,请将其设置为 12x12,并使用额外的 2 行和列来插入该信息。

现在你可以做(​​伪代码): 如果板上的点是“超出边界值”那么 做你的事 结束如果

请注意,如果您的点同时具有 x 和 y 值(我对您的情况的假设),此方法只是一种优化。

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2021-07-02
    相关资源
    最近更新 更多