下面的代碼段,以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);}}
將調用DoSomething
用下面的x,y對:
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+height
和x=i-j
的計算感到困惑。這種轉換如何工作?
究竟是什麼讓你感到困惑?你的代碼片段只顯示「int」,所以不涉及任何轉換。 –
'i'遍歷對角線(不包括左上角)。所以'maxI'是對角線的數量。 'j'遍歷當前對角線上的元素。所以'maxJ'取當前的'i'並計算該對角線上的元素數量。 – mbeckish