0

我在屏幕上有很多粒子来绘制某个对象。为了做出很酷的渐变效果,我有以下一行:

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

这个想法是编写一个函数来基于任意输入来执行此操作。

4

1 回答 1

1

让我们来看看; 根据修改后的问题,这应该有效:

private int step = 3;
int StepDivider (int value, int maximum) {
  return value / (maximum / step);
}
于 2013-05-01T04:41:21.833 回答