C# - 夹紧角度与使用模数
C# - Clamping an angle vs using modulo
像下面的代码那样clamping an angle有什么区别
do
{
if(angle < -360)
{
angle += 360;
}
if(angle > 360)
{
angle -= 360;
}
}while(angle < -360 || angle > 360);
...并使用模运算;
angle = angle % 360;
...如果这与 Unity 游戏引擎相关。
假设 angle
是一个整数,不同之处在于您的钳位代码允许恰好 -360
或 +360
度的角度。模数会将其减少到零。
这些评论谈到了处理负值的不同之处。这些评论是错误的。这两种方法都会将 -10
保留为 -10
.
如果 angle
不是整数类型,例如 double
,由于重复加法,%
运算符可能会给出与重复加法或减法不同的结果或减法引入舍入问题。在这种情况下,%
运算符将是更好的匹配。但是,您需要过大的角度才能成为问题,并且对于那些过大的角度,您无论如何都没有足够的精度来准确表示角度。
像下面的代码那样clamping an angle有什么区别
do
{
if(angle < -360)
{
angle += 360;
}
if(angle > 360)
{
angle -= 360;
}
}while(angle < -360 || angle > 360);
...并使用模运算;
angle = angle % 360;
...如果这与 Unity 游戏引擎相关。
假设 angle
是一个整数,不同之处在于您的钳位代码允许恰好 -360
或 +360
度的角度。模数会将其减少到零。
这些评论谈到了处理负值的不同之处。这些评论是错误的。这两种方法都会将 -10
保留为 -10
.
如果 angle
不是整数类型,例如 double
,由于重复加法,%
运算符可能会给出与重复加法或减法不同的结果或减法引入舍入问题。在这种情况下,%
运算符将是更好的匹配。但是,您需要过大的角度才能成为问题,并且对于那些过大的角度,您无论如何都没有足够的精度来准确表示角度。