我怎样才能更优雅地做到这一点?

时间:2015-06-07 14:57:27

标签: c++ geometry

我在[0,1]²广场内有一个2D点。

广场分为9个子方(等尺寸) http://www.noelshack.com/2015-23-1433689273-capture.png

我想知道A点属于哪个子方格。

我可以在第一个坐标上执行if elseif else,然后在每个分支内执行if else else,如果是else,则在第二个坐标上执行if else。

有很多代码重复(检查第二个坐标)

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

问题是,目前尚不清楚你的2D点是什么,你想要什么样的子平方值等等。所以一个明确的答案很难。但无论如何,我会做出一些假设,看看我对你的要求是否正确......

假设你的A点坐标为:

float point[2] = {0.1224, 0.4553}

然后,为了解决它在广场内的位置,你可以做一些简单的数学运算:

float x = point[0] * 3;
float y = point[1] * 3; //Multiply both by 3
int xIdx = floor(x);
int yIdx = floor(y); //Floor the result - this gives a number 0 to 2
int cell = yIdx * 3 + xIdx + 1; // Calculate the cell index (based on your diagram)

现在你可以对任何一点进行概括 - 例如,点可能是(1.23343,2.66768) - 只需从点中删除整数部分 - 留下0到1之间的数字。整数部分将是超级单元格,如上所述,小数部分将转换为子单元格。