将索引分配给一系列值

时间:2013-04-29 02:01:37

标签: c#

我在屏幕上有很多可以绘制某个物体的粒子。为了产生很酷的渐变效果,我有以下几行:

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

我们的想法是根据任意输入编写一个函数来执行此操作。

1 个答案:

答案 0 :(得分:1)

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

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