gpt4 book ai didi

c# - 这种坐标转换是如何达到预期效果的呢?

转载 作者:行者123 更新时间:2023-11-30 15:31:11 25 4
gpt4 key购买 nike

以下代码片段,width=2,height=2

int maxI = width + height;
for (int i = 1; i <= maxI; i++) {
int startJ = Math.Max(0, i - width);
int maxJ = Math.Min(i, height);
for (int j = startJ; j <= maxJ; j++) {
int x = i - j;
int y = j;
DoSomething(x,y);}}

将使用以下 x,y 对调用 DoSomething:

1: X=1,Y=0
2: X=0,Y=1 (Diagram: 0,0
3: X=2,Y=0 at bottom left)
4: X=1,Y=1 5 7 8
5: X=0,Y=2 2 4 6
6: X=2,Y=1 @ 1 3
7: X=1,Y=2
8: X=2,Y=2

这是期望的结果;从 0,0 开始迭代一个矩形,但沿对角线扩展而不是(更流行的)[y*width+x]。但是,我对 maxI=width+heightx=i-j 计算感到困惑。这种转换是如何进行的?

最佳答案

这里需要注意的是,对于特定对角线上的每个单元格,x + y 是一个常数。例如,单元格 3、4 和 5 的坐标为 {2, 0}; {1, 1}; {0, 2}。请注意,每个加起来都是 2。

所以 maxI 实际上是其中一个总和的最大值。由于 {width, height} 位于右上角,因此该对角线的总和为 width + height。这就是它的来源。

i - j 部分的出现是因为它基本上是在求解上述等式。 i 的每个值都是坐标的总和。 j 被选为该对角线内单元格的 y 坐标。因为我们知道 x + y = iy = j,所以我们得到 x + j = ix = i -j.

关于c# - 这种坐标转换是如何达到预期效果的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com