【问题标题】:Finding relative position in plus shape查找加号形状的相对位置
【发布时间】:2017-09-02 01:57:43
【问题描述】:

我正在制作一个抖动库。为了找到绝对点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。这在数学上是如何实现的?任何语言,伪代码也很棒。 :)

【问题讨论】:

  • 如果需要我可以制作图像:)
  • 加号形状的绝对位置-加号的中心坐标属于哪个点是什么意思? (是的,我意识到这种形状的紧密包装 - 有两种:右上和右下)
  • @MBo 绝对位置是以加号为中心的 3x3 正方形的绝对位置。而且他们都挤得很紧:)
  • 值得指定(显示)您的坐标原点和平铺类型。 RRD平铺的图片帮助:i.pinimg.com/236x/00/20/66/002066c83fcf2efb7acd44224403b272--patterns-to-colour-textile-patterns.jpg
  • 你为什么要混淆 relativeabsolute 位置? "要找到...的相对位置,我使用abs.x = a.x % 4..."

标签: geometry


【解决方案1】:

沿 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  

【讨论】:

  • 那么,这里没有直接的方法吗?可能是两个班轮的东西,或者那种。我现在会尝试一下,但请保持答案开放,以便其他人可以发布:) 感谢您的帮助
  • 数组方法是四线:)
  • 非常出色的工作。非常感谢您,我可以看到您为帮助我付出了很多努力。谢谢你:D
  • 你最好的:D
  • 我觉得,我知道! ;-)
猜你喜欢
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多