Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何计算/描述相对位置(rubix cube)_Algorithm_3d_Pseudocode - Fatal编程技术网

Algorithm 如何计算/描述相对位置(rubix cube)

Algorithm 如何计算/描述相对位置(rubix cube),algorithm,3d,pseudocode,Algorithm,3d,Pseudocode,这是一个算法问题。我似乎找不到一种方法来比较rubix立方体中两个立方体的相对位置 我已经对程序中的所有20个立方体进行了编号。我用的是这个坐标系,但现在我想在相对位置模拟两个立方体,我遇到了麻烦 例如,假设我在位置8和10看到了我正在观看的两个立方体,然后我在位置12和13看到了它们,在这两种情况下,它们都在立方体的同一面上,并且它们都相互交叉,而不是相邻。相对而言,这是相同的位置表示 (顺便说一句,我现在只关心“边立方体”,那不是角,所以:8109112131516171819位置) 所以

这是一个算法问题。我似乎找不到一种方法来比较rubix立方体中两个立方体的相对位置

我已经对程序中的所有20个立方体进行了编号。我用的是这个坐标系,但现在我想在相对位置模拟两个立方体,我遇到了麻烦

例如,假设我在位置8和10看到了我正在观看的两个立方体,然后我在位置12和13看到了它们,在这两种情况下,它们都在立方体的同一面上,并且它们都相互交叉,而不是相邻。相对而言,这是相同的位置表示

(顺便说一句,我现在只关心“边立方体”,那不是角,所以:8109112131516171819位置)

所以不管怎样,我认为如果我列出每个位置相对于每个起始点,使用相同的算法列出每个位置,那么我可以比较索引,如果它们相同,相对位置将是相同的(但我错了,我可能在正确的轨道上,但它并不总是有效):

考虑以下两个位置:立方体A位于药剂19处,立方体b位于药剂16处。它们在底层相邻。这是“19”行,其索引为16:

0  1  2  3    4   5   
19 17 09 11   18  16  08  10    12  15  14  13
现在将其与立方体c和d在13和9处的相对位置进行比较。C和D在右侧相邻,因此它们应该具有相同的相对位置。但我的方法不能确定这一点

0  1  2  3    4   5   6   7     8   9
13 14 15 12   08  16  18  10    17  09  11  19
索引6不等于索引9。无论如何,这是我最好的方法,我花了一整天才想出

在计算/表达立方体上两个位置之间的相对位置时,有人会想到其他策略吗


非常感谢您对本主题的帮助和考虑

这里有两个问题:

  • 我认为你在计算立方体13的相对位置时犯了一个错误。我得到:

    0  1  2  3     4  5  6  7     8  9  10 11 
    13 14 15 12    17 09 11 19    08 16 18 10
    
    这和另一个对齐,所以立方体9出现在位置5。将其与第一行进行比较:

    0  1  2  3     4   5   6
    19 17 09 11    18 16 08 10    12 15 14 13
    
    根据要求,16号立方体也出现在第5位(我想你在问题中弄错了什么。你提到的是索引6,而你指的是5。你将索引编号为6,但在第6位有8号立方体,而不是16号立方体。请再次检查)

  • 第二个问题是,只给定一个立方体位置,而没有一个用于方向的参考立方体,有两种方法可以对立方体进行编号。由于立方体未着色,因此可以将立方体旋转180度,然后使用参考立方体的另一个编号。假设立方体19的相对位置是正确的,我也可以对立方体13的相对位置进行如下编号:

    0  1  2  3     4  5  6  7     8  9  10 11 
    13 12 15 14    08 16 18 10    17 09 11 19
    
    请注意,这与您的版本相近,但索引1到3的顺序不同。我认为你看立方体的方式不一致

在本段中,主要问题已经变得显而易见:

例如,假设我看到我正在观看的两个立方体在位置8和 10,后来我看到他们在12和13号位置,两个位置都很好 它们都在立方体的同一面,而且都是 相互交叉,而不是相邻。相对而言,这是最重要的 相同的位置表示


对于每个立方体,有两个其他立方体在同一个面上,彼此交叉。为了消除这种模糊性,您必须考虑方向或减少相对位置的数量(例如,当前方案中的索引1和索引3将表示相同的相对位置)。

恐怕很多事情都不清楚。“所以不管怎样,我想如果我列出每个位置相对于每个星点,使用相同的算法列出每个位置,那么我可以比较索引,如果它们相同,相对位置也会相同。”???我不知道如何解释下面的表格。什么是“相对位置”?你只对位置感兴趣而对方向不感兴趣是正确的吗?每个边立方体在同一位置可以有两个方向。@j_random_hacker:他有一个特定的模式从某个起点遍历边立方体。当从立方体8开始时,他从顶面到立方体10,然后从下一个面到立方体18,依此类推。从立方体9开始(在心里旋转立方体,这样9就是8之前的位置),你从顶面到11,然后向下到19。。。请参阅我的答案,了解为什么这不能解决问题。@Legit我认为你在问题中犯了一个错误。您将立方体19的相对位置编号为0到6(在第二个列表中)。但是,您感兴趣的立方体16位于位置5。您稍后还会提到位置6,我认为它应该是5。@lex82是的,这是正确的,我只对这一点上的位置感兴趣。(我只是想一次找出一件事。)你说得对,我本应该数到5的,但我确实数到了6。我现在已经在问题中解决了这个问题,谢谢。你说得对,我没有考虑立方体的方向。好的,让我来做这件事,然后再打给你,谢谢!好的,我找到的解决方案是制作另一个列表,和第一个一样大,每个立方体的方向相反8-19。现在是8.1和8.2。如果一系列立方体与.1或.2的方向匹配,我们将以[concat.1.2]顺序组合这两个列表,从而给出一个相对位置。示例5位置(09 14 16 12 10)中的立方体(x、a、b、c、d、e)每个边立方体的第一个列表与方向9.1的09:09 11 19 17 13 14 15 12 10 08 16 18索引:06 08 09 11相关。他们的签名是:06 11 08 09加上方向9.2,即:10 07 12 05。因此:0611080910071205为其他方向制作另一个列表听起来是合理的。然而,从那里我再也不能跟随你了。不过,我很高兴我能帮助你,你也能取得进步。
0  1  2  3     4  5  6  7     8  9  10 11 
13 12 15 14    08 16 18 10    17 09 11 19