javascript – 如何确定“时钟”形状连接?

我有一个挑战,我正试图设计一个解决方案.这可能最适合
math方面,但我希望有一个预先存在的库或众所周知的算法可能有效.

简单地说,我有四个将在网格中布局的形状,我试图确定它们是否在端点对齐时连接.换句话说,想想时钟行.当一个时钟的指针指向另一个时钟的指针时,它们会“连接”.为了进一步扩展这个类比,我只有4个“时间”:3:00,6:15,5:45,9:00(忽略可能是大手小手).

出于讨论的目的,我们假设时钟在行中对齐,因此可能存在有限的连接(在最终解决方案中,这些时钟将在网格中对齐).

我试图将各种数学概念应用于此,包括简单地识别quandrants或编号.目前我正在使用一点方法并从“中午”(或直线向上)开始以顺时针方式识别指针.我在该位置使用0表示没有手,而1表示有一手牌.

《javascript – 如何确定“时钟”形状连接?》

我创建了下面的图表来表示可用的连接和那些无法连接的连接.我希望很明显,在图表的第3行和第4行中,那些有连接的时钟将与“原点”时钟的左边对齐.

《javascript – 如何确定“时钟”形状连接?》

《javascript – 如何确定“时钟”形状连接?》

要阅读图表,请以第一行为例.原点时钟将连接到“有连接”下的两个时钟(如果每个时钟立即与原点右侧对齐). “无连接”时钟无论是否与原点的右侧或左侧对齐都没有可能的连接.

这些数字是我目前尝试应用模式但可能是一个红色的鲱鱼,因为它们似乎并没有给我任何帮助来设计算法.根据需要使用或忽略它们.

所有这些说,我愿意使用任何类型的技术,包括图形冲突或任何可能使这更容易的预建库.我甚至很快就查看了有向图和矢量碰撞,但它似乎很快变成了矫枉过正.

FWIW,我正在使用Javascript解决方案.

最佳答案

var clock1 = 6; // 0110
var clock2 = 3; // 0011
var direction = 4;
  // 8 = clock2 is above clock1
  // 4 = clock2 is to the right of clock1
  // 2 = clock2 is below clock1
  // 1 = clock2 is to the left of clock1
var connected = (clock2 * 4 % 15 & clock1 & direction) != 0;
点赞