0

这可能是一个简单的解决方案,只是让我望而却步。具体来说,我正在使用 sin() 函数在画布上动态创建位置,用于圆上的等距点。创建这些点后,我将通过计算点之间的斜率并在每个斜率步骤重绘形状来为从一个点移动到下一个点的形状设置动画。

问题是,根据坐标值,斜率步长可能只是从点 a 到点 b 的一步。我需要形状沿着路径移动,而不仅仅是点对点跳跃。

我想要做的是强制位置坐标 (x, y) 为偶数,允许斜率值始终可减少。所以,问题的简单部分是......

如何检查 int 值是否为偶数?如果不是,我将简单地将坐标值加 1。

4

5 回答 5

1

查看整数是否为偶数:

  1. 检查其值是否与 0 模 2 一致。即value MOD 2 == 0。在 C 风格的语言中,这通常表示为value % 2 == 0.
  2. 或者,检查位 0 的值。即value BITWISE-AND 0x01 == 0. 在 C 风格的语言中,这通常表示为(value & 0x01) == 0.

如果您不关心您舍入的方向,您可以通过按位取值和掩码0xFFFE(当然填充到整数的宽度)在单个操作中对整数进行平均化,这将强制设置 0 位为零。也就是说value := value BITWISE-AND 0xFFFE,或者在 C 风格的语言中value &= 0xFFFE

于 2013-09-06T17:57:13.353 回答
1
int newNumber = someInt % 2 == 0 ? someInt : someInt + 1;
于 2013-09-06T17:55:17.457 回答
0

在上面做一个mod 2。如果余数为 0,则为偶数。

VB:

暗淡 = (3 mod 2 = 0 )

于 2013-09-06T17:55:40.003 回答
0

由于您没有给出很多细节,因此很难为您提供具体信息,但您应该查看 Modulo operation

于 2013-09-06T17:56:48.257 回答
0

对于整数,虽然使用模数会给你正确的答案,但它需要除法。除法不如按位运算快。对于您的需要,按位 AND 就足够了。

if(x & 0x1)
{
   sdt::cout << "x is odd" << std::endl;
}
else
{
   std::cout << "x is even" << std::endl;
}

关键是二的所有正幂都是偶数。因此,整数的二进制表示可以是奇数的唯一方法是设置第一位。

于 2013-09-06T18:10:02.803 回答