9

我有一个很酷的问题。我试图突出显示这只火鸡 50% 的质量。实际上,它不会是 50%,但如果我能得到 50%,我可以算出其余的。

我目前的想法是:扫描每个像素以找出火鸡的质量,以像素为单位。然后,当我想要 50% 的火鸡时,从左到右突出显示像素,直到突出显示 50% 的像素。

有没有人有更好的想法?这是最慢的、蛮​​力的想法,需要遍历每个像素一次以计算像素,然后再次突出显示其中的 50%。

请注意,垂直分割图片不会留下 50% 的火鸡,因为火鸡的身体比它的脖子要多肉。

这是一只火鸡

4

2 回答 2

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阴影图片到非阴影图片的快速、范围复制并保存。不再循环。你不能比这更快。

于 2012-04-24T02:13:18.940 回答
0

这个问题看起来并没有一个聪明的算法来解决这个问题。但是我也不是 CG 方面的专家,所以我可能错了。

如果你最终在 n 上使用嵌套循环,那么尝试寻找这样的解决方案可以很好地增加时间复杂度(而不是 O(n)),其中 n 是火鸡使用的像素总数。

相反,执行两遍方式很容易实现(实现的时间/精力非常少),并且忽略常数 2 也是 O(n),这不是一个糟糕的解决方案。根据您编写此解决方案的目的、硬件、空间限制等;走两条路可能会更有意义。

于 2012-04-24T02:25:32.010 回答