c++ - 将对象位置对齐到网格

标签 c++ math

我想将对象位置与网格对齐。 例如,如果我的对象位置是 (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);

我的问题是: 这是将对象与网格对齐的好方法吗?

% 运算符很快(我经常使用它)?

如果我使用 float 而不是 int 我可以做什么来对齐位置?

最佳答案

您可以使用 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;
}

关于c++ - 将对象位置对齐到网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136032/

相关文章:

php - 那么...人们如何使用 Visual C(++) 进行编程?

c++ - time.h 实现代码在哪里?

c++ - 依赖于其他模板参数的模板参数?

c++ - 音频单位样本值范围

给定两个函数的Javascript找到交集

php - 如何优化这些查询?

c++ - 我需要所有诺基亚 qt DLL 吗?

c++ - 在基类数组中使用子类方法的默认值

javascript - 如何从矩形点计算旋转 Angular ?

c# - 通过LiangBarsky算法裁剪线C#