2

オブジェクトの位置をグリッドに揃えたい。たとえば、オブジェクトの位置が(102、93)で、グリッドサイズが10の場合、位置合わせされた位置(複数)は(100、90)である必要があります。私のプログラムはそれを何度も行います。

現在私はこれを使用しています:

inline int Align(int value, int size)
{
    return (value - (value % size));
}

次に、オブジェクトの位置が変更されたときにこれを行います。

this->m_x = Align(new_x, GRID_SIZE);
this->m_y = Align(new_y, GRID_SIZE);

私の質問は次のとおりです。これは、オブジェクトをグリッドに揃えるのに適した方法ですか?

%演算子は高速です(私はそれをよく使用します)?

intの代わりにfloatを使用する場合、位置を揃えるために何ができますか?

4

2 に答える 2

3

std :: fmod:を使用できます

inline float Align(float value, float size)
{
    // Added std::abs to give correct behaviour for negative values
    return value - std::abs(std::fmod(value, size));
}

または代わりに:

inline float Align(float value, float size)
{
    return std::floor(value/size) * size;
}
于 2012-08-27T03:57:01.503 に答える
1

整数演算を使用して同じことを行う別の方法は、次のようになります。

inline int Align(int value, int size)
{
    return (value/size)*size;
}

サイズが2の累乗の場合、ビットマスキングを使用できます(たとえば、サイズ16の場合)。

inline int AlignTo16(int value)
{
    return value & 0xfff0
}
于 2012-08-27T03:55:03.587 に答える