我在[0,1]²广场内有一个2D点。
广场分为9个子方(等尺寸) http://www.noelshack.com/2015-23-1433689273-capture.png
我想知道A点属于哪个子方格。
我可以在第一个坐标上执行if elseif else,然后在每个分支内执行if else else,如果是else,则在第二个坐标上执行if else。
有很多代码重复(检查第二个坐标)
有更好的方法吗?
答案 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之间的数字。整数部分将是超级单元格,如上所述,小数部分将转换为子单元格。