C++中根据x、y坐标快速设置二维数组结构体的z值
从x、y值快速计算数组索引的逆运算方法
核心逆运算公式非常直接:
int index = y * Width + x;
原理说明
你初始化数组时的正向逻辑是:
- 对索引
i,横向位置x = i % Width(取余得到列号,范围0到Width-1) - 纵向位置
y = i / Width(整数除法得到行号,因为每行包含Width个元素)
逆运算就是把行号还原成该行首个元素的索引(y * Width),再加上当前元素在该行的列偏移量x,就能直接得到对应数组索引,完全无需遍历查找。
C++ 代码示例
#include <vector> // 定义xyz结构体 struct xyz { float x; float y; float z; }; int main() { const int Width = 10; // 假设每行有10个元素 const int Height = 5; // 假设总共有5行 std::vector<xyz> arr(Width * Height); // 初始化数组的x、y值 for (int i = 0; i < arr.size(); ++i) { arr[i].x = i % Width; arr[i].y = i / Width; arr[i].z = 0.0f; // 初始z值设为0 } // 已知x、y,快速设置z值 float target_x = 3.0f; float target_y = 2.0f; // 注意:初始化时x、y由整数运算得到,需将传入的float类型转为整数 int idx = static_cast<int>(target_y) * Width + static_cast<int>(target_x); arr[idx].z = 10.5f; // 设置对应元素的z值 return 0; }
注意事项
- 确保
x的整数部分在[0, Width-1]范围内,y的整数部分是合法行号(比如小于Height),否则计算出的索引会越界。 - 因为初始化时x、y是整数运算的结果,实际使用时需要将传入的float类型x、y转为整数再计算索引。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

