2017-09-01 142 views
0

Example of what i need尋找相對位置加上形狀

我正在製作抖動庫。要找到一個絕對點a在平鋪4個單位正方形的二維平面中的相對位置,我使用rel.x = abs.x % 4; rel.y = abs.y % 4。這很好,併產生了預期的結果。但是如果我用3個單位的正形圖案平鋪飛機呢?我如何找到絕對位置?此處顯示瓷磚形狀,1是形狀的一部分,0是空白區域。

0 1 0 
1 1 1 
0 1 0 

例如,如果我有點a擱在x = 1, y = 1,則絕對位置應該是x = 1, y = 1。但是,如果它是,說x = 4, y = 1,那麼絕對位置應該是x = 1, y = 2。你看,會有另外一個加點,它的底部是x = 1, y = 2。這是如何在數學上完成的?任何語言,僞代碼都很好。 :)

+0

如果需要,我可以使圖像:) – Adam

+2

你是什麼意思絕對位置加形狀 - 加點的中心座標屬於哪個點? (是的,我意識到這些形狀的緊密包裝 - 有兩種:右上和右下) – MBo

+0

@MBo絕對位置是以正中心爲中心的3x3方格的絕對位置。它們緊密排列在一起:) – Adam

回答

2

有周期性沿X與Y軸的時期5.只要開關表達可能是這樣的:

case y % 5 of: 
    0: case x % 5 of 
     0: cx = x - 1; cy = y; 
     1: cx = x; cy = y + 1; 
     2: cx = x; cy = y - 1; 
     3: cx = x + 1; cy = y; 
     4: cx = x; cy = y; 
    1:... 

或者,我們可以創建數組常量5x5的,並與轉變-1,0填充它, 1.

dx: [[-1,0,0,1,0],[1,0,-1,0,0],[0,0,1,0,-1],[0,-1,0,0,1],[0,1,0,-1,0]] 
dy: [[0,1,-1,0,0],[0,0,0,1,-1],[1,-1,0,0,0],[0,0,1,-1,0],[-1,0,0,0,1]] 

我覺得可能存在一些簡單的公式。

編輯:簡單的版本:

const dx0: [-1,0,0,1,0] 
const dy0: [0,1,-1,0,0] 

ixy = (x - 2 * y + 10) % 5; 
dx = dx0[ixy]; 
dy = dy0[ixy]; 

最後瘋狂單行沒有持續的陣列

dx = (((11 + x - 2 * (y%5)) % 5)^1 - 2)/2 //^=xor; /2 - integer division 
dy = ((13 + x - 2 * (y%5)) % 5 - 2)/2 
+1

那麼,這裏沒有一個簡單的方法嗎?有些東西可能是兩個班輪,或者是那種。我現在會試試這個,但保持打開的答案,以便其他人可以張貼:)感謝您的幫助 – Adam

+0

數組方法是四行:) – MBo

+0

非常好的工作。非常感謝你,我可以看到你付出了很多努力來幫助我。感謝uuu:D – Adam