为一组值分配索引
本文关键字:分配 索引 一组 | 更新日期: 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);
}