我在屏幕上有很多可以绘制某个物体的粒子。为了产生很酷的渐变效果,我有以下几行:
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和给定的max(即,positions.Count)动态缩放值以成为colorTable的索引
换句话说,如果低于maxIndices,则需要为0;如果大于此值,则需要为1,但是低于maxIndices * 2等,直到最大值。我该怎么做?
修改
为了清晰起见,重新描述等式:
我有一个带两个输入的函数:给定的i和给定的max。我总是小于最大。
在函数内部,我通过将max除以常数来得到步骤(比方说,3)。该函数应该返回一个从0到此常量的值,具体取决于i相对于步骤的值。
例如: 如果最大值是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
我们的想法是根据任意输入编写一个函数来执行此操作。
答案 0 :(得分:1)
让我们看看;根据修订后的问题,这应该有效:
private int step = 3;
int StepDivider (int value, int maximum) {
return value / (maximum / step);
}