gpt4 book ai didi

arrays - 如何获得 3 维数组的所有 24 个旋转?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:52 25 4
gpt4 key购买 nike

我有一个 3 维数组。把它想象成一 block 砖。这 block 砖有 24 种可能的旋转(保持其边缘与坐标轴平行)。如何生成所有对应的 3 维数组?

最佳答案

一个骰子(半对骰子)可以方便地观察 24 个不同的方向,并可以建议操作顺序来生成它们。你会看到六个面中的任何一个都可以在最上面,下面的边可以旋转到四个不同的基本方向。让我们表示两个操作:“turn”和“roll”,其中 turn 将骰子绕 z 轴从一个基数旋转到下一个基数,roll 将模具旋转 90°,远离您,因此远离面变为底面,近面变为顶部。这些操作可以使用 Felipe Lopes 的回答中提到的旋转矩阵来表示,或者可以表示为简单的函数,当给定 (x,y,z) 时返回 (-y,x,z) 或 (x,z,- y), 分别。

无论如何,如果将 1 放在近面,2 在右边,3 在上面放置骰子,您会发现以下步骤序列会生成十二个不同的方向,上面有 1、2 或 3 个点: RTTTRTTTRTTT。然后序列 RTR 暴露 6、4、5,而 1、2、3 原来是,序列 RTTTRTTTRTTT 的重复生成 12 个方向,顶部有 4、5 或 6 个点。提到的序列嵌入在以下 python 代码中。

def roll(v): return (v[0],v[2],-v[1])
def turn(v): return (-v[1],v[0],v[2])
def sequence (v):
for cycle in range(2):
for step in range(3): # Yield RTTT 3 times
v = roll(v)
yield(v) # Yield R
for i in range(3): # Yield TTT
v = turn(v)
yield(v)
v = roll(turn(roll(v))) # Do RTR

p = sequence(( 1, 1, 1))
q = sequence((-1,-1, 1))
for i in sorted(zip(p,q)):
print i

打印出已排序的变换点对列表的基本原理是双重的:(i) 任何面的方向都可以由其两个角的位置指定; (ii) 然后很容易检查每对的唯一性,例如通过管道输出到 uniq

排序后的输出是这样开始的:

((-1, -1, -1), (-1, 1, 1))
((-1, -1, -1), (1, -1, 1))
((-1, -1, -1), (1, 1, -1))
((-1, -1, 1), (-1, 1, -1))
((-1, -1, 1), (1, -1, -1))
((-1, -1, 1), (1, 1, 1))
((-1, 1, -1), (-1, -1, 1))
((-1, 1, -1), (1, -1, -1))
((-1, 1, -1), (1, 1, 1))

关于arrays - 如何获得 3 维数组的所有 24 个旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16452383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com