2017-09-01 147 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