用于均匀渲染的算法

时间:2018-03-27 19:26:36

标签: javascript algorithm sorting math

我想编写一个平均绘制表面( // If there is a value in the session, then increment it. if(isset($_SESSION['counter'])) { $_SESSION['counter'] = $_SESSION['counter'] + 1; } else { $_SESSION['counter'] = 1; } // Now, use the value which you have set. <?php echo '<a href = "#section'.($_SESSION['counter']).'">'.'Next Section'.'</a>';?> )的程序。我此刻已经有了一个方法,但它还没有完成,而且速度也很慢。由于这种方法太慢,我不想进一步追求它。

开始时始终存在第一个点和最后一个点 - 因此X * Y区域位于10 x 10处,像素位于0处。

然后必须找到下一个最佳像素,即具有最大距离的像素。这只相对容易,只有两点 - 99所以(99 - 0 / 2)49

现在你必须再次寻找下一个最好的。因此48或48 {是(49 - 0) / 2之前(99 - 48) / 2 / 2425 / 74。{/ p>

必须重复此过程,直到找到正确的序列。

75

我还在这里添加了一个小例子,它展示了它应该如何工作。函数0,99,49,74,24,36,61,86,12,42,67,92,6,18,30,55,80,45,70,95,3,9,15,21,27,33,39,52,58,64,77,83,89,47,72,97,1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,50,53,56,59,62,65,68,75,78,81,84,87,90,93,2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,46,48,51,54,57,60,63,66,69,71,73,76,79,82,85,88,91,94,96,98 应该用数学表达式代替,以获得最快的解决方案。

getElementOrder

有没有解决这个问题的数学方法? 欢迎您在此处发布更好的解决方案,方法或链接到此问题的数学公式。

1 个答案:

答案 0 :(得分:0)

认为我得到了你想要完成的事情,以及基本的例程。我看待它的方式,你可能会过度复杂化找到最大距离的问题,因为从我所看到的情况来看,你基本上做的就是将日益精细的间隔减半。 / p>

所以,这是我的版本:

function getElementOrder(width, height) {
    const length = width * height;
    const order = [ 0 ];
    for (let denominator = 2; order.length < length; denominator *= 2) {
        for (let enumerator = 1; enumerator < denominator; enumerator += 2) {
            order.push(Math.round(length * enumerator / denominator));
        }
    }
    return order;
}

我使用非常长而笨重的变量名来使其背后的原理更加清晰:如果您将[0, width*height]的整个时间间隔预测到[0, 1]的间隔,那么您可以使用它。重新加入1/2,然后是1/4和3/4,然后是1/8和3/8以及5/8和7/8,依此类推;每次将分母乘以2,并取所有奇数倍。

(附录:你可以通过对结果使用固定长度的TypedArray并按索引添加元素而不是使用.push()来挤出更好的性能。我只是没有&#39 ; t想要用附加的循环变量等模糊解决方案的要点。)