【问题标题】:Efficient way to check all points around a given point检查给定点周围所有点的有效方法
【发布时间】:2011-06-02 05:06:14
【问题描述】:

嘿,我最近用 JavaScript 写了这个相当简单的game of life

在这个脚本中,我检查给定单元格周围的所有单元格,我目前通过 8 个 if 语句执行此操作。

它有效,但感觉错误且硬编码。会不会有一种更快、更有效的方法来做到这一点?还是大量的 if 语句是唯一的方法?

【问题讨论】:

    标签: javascript optimization canvas points


    【解决方案1】:

    如何创建一个偏移数组并循环遍历该数组?

    var offsets = [{dx:1,dy:1},{dx:0,dy:1}, ...
    

    【讨论】:

    • 我喜欢这个主意,我会快速整理一下jsPerf 看看会发生什么:)
    • 好吧 if 语句仍然更快,不知道为什么。这是the test。嗯,这是一个艰难的选择,我想我只需要加快循环而不是 if 语句。
    • if 语句所涉及的计算量可能更少……猜想这是一种权衡。
    • 是的,我会接受这一点,因为如果有更多的检查,它会更快,但我的情况并非如此。我已经意识到优化的潜力在于其他地方。
    【解决方案2】:

    您可以对其进行优化,例如,不要多次检查 x > 0,而是将一个包裹另一个 ifs

    if(x > 0) {
        if(cells[x - 1][y]) 
            alive++;
    
        if(y > 0 && cells[x - 1][y - 1])
            alive++;
    
        if(y < edgeAmount && cells[x - 1][y + 1]) 
            alive++;
    }
    

    【讨论】:

      【解决方案3】:

      您可以创建一个查找表,在经过一些步骤后更新,从而加快计算速度

      【讨论】:

        猜你喜欢
        • 2019-06-12
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 2021-08-08
        • 2015-06-19
        • 2021-01-12
        • 2018-07-16
        • 2017-03-28
        相关资源
        最近更新 更多