【问题标题】:Mapping points from one coordinates to another将点从一个坐标映射到另一个坐标
【发布时间】:2018-05-09 11:45:03
【问题描述】:

我有颜色 0 到 254 的表格。

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

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

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

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

函数可能是这样的:

int getColor(int 迭代,int iterations_count)

【问题讨论】:

标签: c# math formula


【解决方案1】:

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

【讨论】:

  • 这正是我想要的 thx ;) 我所要做的就是除以新的最大范围并乘以旧的最大范围
【解决方案2】:

如果我理解您想要什么,您希望在移动到下一个值之前连续选择 X 次相同的值(与使用模数“包装”值相反)。在这种情况下,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;
    }
}

【讨论】:

    【解决方案3】:

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

        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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多