Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将对象位置与栅格对齐_C++_Math - Fatal编程技术网

C++ 将对象位置与栅格对齐

C++ 将对象位置与栅格对齐,c++,math,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(

我要将对象位置与栅格对齐。 例如,如果我的对象位置是(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 intead of int,我能做什么来对齐位置?

使用整数数学做同样事情的另一种方法如下:

inline int Align(int value, int size)
{
    return (value/size)*size;
}
如果您的尺寸是2的幂,则可以使用位屏蔽(例如,对于尺寸16):


使用整数数学做同样事情的另一种方法如下:

inline int Align(int value, int size)
{
    return (value/size)*size;
}
如果您的尺寸是2的幂,则可以使用位屏蔽(例如,对于尺寸16):

您可以使用:

或者:

inline float Align(float value, float size)
{
    return std::floor(value/size) * size;
}
您可以使用:

或者:

inline float Align(float value, float size)
{
    return std::floor(value/size) * size;
}

为什么你甚至会考虑使用浮点——假设你是对齐像素-因为你不能有一小部分pixel@AdrianCornish我会考虑的。但是,我必须对齐到5×N值(n>2)。所以,你仍然不能对齐到一半像素,为什么你甚至会考虑使用浮点-假设你是对齐像素-因为你不能有一小部分的A。pixel@AdrianCornish我会考虑的。但是我必须对齐到5*n的值(n>2)。因此-你仍然不能对齐到半个像素。请注意,这将始终向下舍入,而不是最接近的值(即99将被舍入到90,而不是100)。修改后的版本将在除法之前添加
size/2
,以获得更好的舍入效果。请注意,这将始终向下舍入,而不是最接近的值(即99将舍入到90,而不是100)。修改后的版本将在除法之前添加
size/2
,以获得更好的舍入效果。