我在屏幕上有很多粒子来绘制某个对象。为了做出很酷的渐变效果,我有以下一行:
float factor = (i - 0.0f) / (positions.Count - 0.0f);
这会在 1 和 0 之间缩放以更改颜色的强度。现在这变得无用了,因为粒子将在彼此之上,因此它们看起来像全彩色。我尝试通过以下方式进行微调:
for (int i = 0; i < 1000; i++)
{
Color color = Color.Red * 0.9f; /* factor going down in increments of 0.1f /
}
所以它看起来像:
(color * incrementalFactor) * factor
现在因为一遍又一遍地复制和粘贴它变得重复,我想创建一个看起来像这样的函数:
Color[] colorTable = new Color[] {
Color.Red, Color.Blue, Color.Green
};
Color getColor(int i, int max)
{
int maxIndices = max / colorTable.Length; // the upper bound for each color
/* Somehow get a color here */
}
我的问题是我不知道如何根据给定的索引 i 和给定的最大值(即,positions.Count)动态地将值缩小为 colorTable 的索引
换句话说,如果低于 maxIndices,i 需要为 0,如果大于该值,则需要为 1,但低于 maxIndices * 2,等等,直到最大值。我该怎么做呢?
编辑
为了清楚起见,重新表述方程:
我有一个接受两个输入的函数:给定的 i 和给定的最大值。i 总是小于最大值。
在函数内部,我通过将最大值除以一个常数(比如说,3)来获得步骤。该函数应返回一个从 0 到该常量的值,具体取决于 i 相对于 step 的值。
例如:如果最大值为 1000
f(200, 1000) = 0
f(400, 1000) = 1
f(600, 1000) = 2
f(800, 1000) = 3
换句话说,
step = 1000 / 3
if (i < step) return 0
if (i >= step && i < step * 2) return 1
这个想法是编写一个函数来基于任意输入来执行此操作。