我需要在 C# 中进行某种钳位。当一个数字达到最大值时,它会返回零,而当它达到最小值时,它会向后退到最大值。我需要这样做,因为我想平铺纹理。
问问题
2595 次
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 回答