0

我需要在 C# 中进行某种钳位。当一个数字达到最大值时,它会返回零,而当它达到最小值时,它会向后退到最大值。我需要这样做,因为我想平铺纹理。

4

5 回答 5

7

您需要的是 Modulus 运算符(稍作调整以按照您想要的方式处理负数)。

public static int Modulas(int input, int divisor)
{
    return (input % divisor + divisor) % divisor;
}
于 2013-01-15T18:43:30.227 回答
3

模是你的朋友:

myVal = (myVal++) % (maxValue+1);

例如,如果您的最大值为 4,则:

0 % 5 = 0
1 % 5 = 1
2 % 5 = 2
3 % 5 = 3
4 % 5 = 4
5 % 5 = 0
6 % 5 = 1
....
于 2013-01-15T18:45:41.227 回答
2

你到底哪里有问题?

这似乎很简单:

int number = 4; int maxNum = 20; int minNum = 5;
number = number > maxNum ? 0 : number < minNum ? maxNum : number;
// 20

演示

于 2013-01-15T18:42:32.460 回答
1

好的,找到解决方案

private float Wrap(float val, float min, float max)
    {
        val = val - (float)Math.Round((val - min) / (max - min)) * (max - min);
        if (val < 0)
            val = val + max - min;
        return val;
    }
于 2013-01-15T19:58:54.733 回答
0
private const Int32 c_ClampMaximum = X;

private Int32 m_Clamp;

public Int32 Clamp
{
    get { return m_Clamp; }
    set
    {
        if (value >= c_ClampMaximum)
        {
            m_Clamp = 0;

            while (value > c_ClampMaximum)
               value -= c_ClampMaximum;
        }

        m_Clamp = value;
    }
}
于 2013-01-15T18:44:01.833 回答