为一组值分配索引

本文关键字:分配 索引 一组 | 更新日期: 2023-09-27 18:11:20

我有很多粒子在屏幕上画一个特定的对象。为了制作一个很酷的渐变效果,我有以下一行:

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, i需要为0,如果大于1,但低于maxIndices * 2,以此类推,直到最大值。我该怎么做呢?

编辑

为了更清晰地表述等式:

我有一个函数有两个输入:一个是给定的I,一个是给定的max。i总是小于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

我们的想法是编写一个基于任意输入的函数来完成这个任务。

为一组值分配索引

我们看看;根据修改后的问题,这应该可以工作:

private int step = 3;
int StepDivider (int value, int maximum) {
  return value / (maximum / step);
}