2013-06-30 109 views
0

如果我有一個3×3的50像素正方形的水平編號爲1-9的網格,如下所示;在javascript中計算網格的座標?

| 1 | 2 | 3 |

| 4 | 5 | 6 |

| 7 | 8 | 9 |

如果我知道方形的數字,例如方形9,以及這個實例中的正方形的寬度是50像素,我如何以編程方式計算出基於座標系的方形座標0,0從左上角開始。

廣場9在這種情況下會x = 100y = 100

到目前爲止我試過,但失敗了,

x = (squareNumber * squareWidth) 
y = (squareNumber * squareHeight) 

回答

1

的一般公式是:

x = (squareNumber - 1) % numberOfSquaresPerRow * squareWidth 
y = (squareNumber - 1)/numberOfSquaresPerCol * squareHeight 

在你情況下,因爲它是一個3×3格,這將是:

x = (squareNumber - 1) % 3 * squareWidth 
y = (squareNumber - 1)/3 * squareHeight 

在Javascript中,不使用整數除法,你必須使用y如下:

y = Math.floor((squareNumber - 1)/3) * squareHeight 
+1

你會在你面前需要地板'y'值'* squareHeight'自JS不會自動截斷整數除法中的小數。 (JS並沒有真正的整數。) –

+0

@CrazyTrain謝謝!我不知道這個特點。答案現在已更新。 – Artyom

+0

謝謝,我正在嘗試各種數學,只是無法讓它工作。 – user2251919

1
var width=50,height=50; 
function gridPos(n){ 
     var pos={}; 
     pos.x=(n -1)%3*width; 
     pos.y=Math.floor((n-1)/3)*height; 
     return pos; 
} 
pos=gridPos(8); 
console.log("pos is " + pos.x + " " + pos.y);