我有一个很酷的问题。我试图突出这个火鸡的质量的50%。在实践中它不会是50%,但如果我能得到50%,我可以把剩下的都搞清楚了。
我目前的想法是:扫描每个像素以找出火鸡的质量,以像素为单位。然后,当我想要50%的火鸡时,从左到右突出显示像素,直到我突出显示50%的像素。
有没有人有更好的想法?这是最慢,蛮力的想法,需要在每个像素上循环一次以计算像素并再次突出显示50%的像素。
请注意,垂直划分图片不会留下50%的火鸡,因为火鸡的身体比它的脖子更加肉质。
答案 0 :(得分:3)
你说百分比会改变,但我会在这里继续下去并假设火鸡本身不会。
所以你不需要循环两次。您只需要执行一次,将数据映射到您可以引用的某种形式的结构,然后每次需要突出显示时才引用它以确定您需要走多远。
例如,创建一个<percentage of mass (integer out of a hundred) => vertical column number (int)>
这样,当你需要遮蔽x%时,你只需要遍历cached_data [percent_to_highlight]像素列,将它们全部着色,然后一旦到达它就完全脱离循环。
为了获得更高的性能,请拍两张照片 - 一张完全阴影加上正常阴影。关联数组应映射percentage => byte_offset
对于您希望生成的每个图像,只需memcpy或任何PHP相当于来自非阴影和保存的着色图片的0 -> byte_offset
的快速,远程复制。不再循环。你不能比这更快。
答案 1 :(得分:0)
这个问题看起来没有一个智能算法可以做到这一点。但是我也不是CG的专家,所以我可能错了。
如果最终在n上使用嵌套循环,那么尝试寻找这样的解决方案可以很好地增加时间复杂度(比O(n)),其中n是火鸡使用的总像素数。
相反,执行两个传递方式非常容易实现(实现的时间/工作量非常少),并且O(n)也忽略了常量2,这不是一个糟糕的解决方案。 取决于您正在编写此解决方案的目的,硬件,空间约束等;走这两条路可能会更有价值。