将点从一个坐标映射到另一个坐标

时间:2014-05-21 15:37:00

标签: c# math formula

我的表格颜色为0到254。

我进行了X次迭代,并在每次迭代中选择X颜色。 因此,例如在迭代0中,我选择颜色[0],在迭代4中,我使用颜色[4]。

当有256次迭代时很好。问题是当我想要例如1000次迭代时。 我仍然希望从0到255之间选择颜色。对于彼此靠近的迭代它们可以是相同的,例如1,1,2,2,3,3,4,4 ... 254.254。 我不想用modulo包装它。喜欢:x = c mod 255;

所有迭代(无论多少次)都必须获得0到254之间的颜色。

我认为这是将点从一维映射到另一维的问题。如果愿意,可以重新调整范围。

功能可能是这样的:

  

int getColor(int iteration,int iterations_count)

3 个答案:

答案 0 :(得分:1)

要将[0,1000]范围内的数字映射到[0,255]范围内,除以1000并乘以255.

答案 1 :(得分:1)

如果我理解你想要的东西,你希望连续X次选择相同的值,然后再转到下一个值(与#34;包装"带模数的值相对)。在这种情况下,X是每种颜色选择相同次数的值(不包括奇数迭代情况下的最终颜色)。

如果这是正确的,您应该能够通过将总迭代次数除以您使用和舍入的颜色数来计算X的值:

var X = Math.Round(NumIterations / 255, 0);

然后你可以在另一个输出每个值的循环中使用它,类似于:

int endValue = NumIterations - X;
for (int iteration = 0; iteration < endValue; iteration++) {
    for (int i = 0; i < X; i++) {
        color[iteration + i] = iteration;
    }
}

答案 2 :(得分:1)

另一种迭代次数较少的方法,只需将迭代次数除以最大值即可获得在返回下一个数字之前返回一个数字的次数。

    int[] GetColor(float iterationCount, float max = 255)
    {
        float div = iterationCount/max;
        int[] color = new int[(int)iterationCount];

        for (int i = 0; i < iterationCount; i++)
            color[i] = (int)Math.Round(i/div);

        return color;
    }