如何将屏幕x坐标转换为等宽单元格对应的数组下标
计算逻辑很简单,核心是利用浮点数除法后向下取整匹配区间规则,再做个简单的边界校验避免数组越界即可。
具体实现
public static int getIndexAt(float x) { // 计算单个单元格的宽度,转float避免整数除法精度丢失 float cellWidth = (float) WIDTH / SIZE; // 浮点数除法后强转int默认向下取整,刚好匹配左闭右开的区间规则 int index = (int) (x / cellWidth); // 处理x恰好等于WIDTH的边界情况,防止下标超出数组范围 return Math.min(index, SIZE - 1); }
验证效果
拿你给出的示例测试:
- WIDTH=300,SIZE=3,cellWidth=100,x=250时,250/100=2.5,强转int得2,符合预期
- 你现有代码中WIDTH=900、SIZE=3、x=447.0f的场景,447/300=1.49,返回下标1,运行不会报错
注意事项
如果后续WIDTH和SIZE要改成动态传入的参数,给方法加两个入参即可,计算逻辑不需要修改。
内容的提问来源于stack exchange,提问作者QuanticMeme
相关产品推荐
相关产品推荐

