mathematica에서 rubics 큐브를 어떻게 디자인 할 수 있는지 알고 싶습니다. 가능한 것이고 어떻게 진행할 수 있습니까? 우리는 큐브의 6면에있는 작은 큐브의 서로 다른 분리를 어떻게 결정할 수 있습니까?Rubik의 입방체 표현 방법
답변
데이터 구조를 정의하는 방법을 묻습니다. 정의한 작업이 올바르게 작동하는 한 선택은 임의적입니다. 는, (각각의 이동에 대해 3 개 개의 층을 3 축 비틀림 (임의로 비틀림 방지) 동작을 정의 할 수 있습니다이어서
newCube[] := {
{red, red, red, red, red, red, red, red, red},
{orange, orange, orange, orange, orange, orange, orange, orange, orange},
{yellow, yellow, yellow, yellow, yellow, yellow, yellow, yellow, yellow},
{green, green, green, green, green, green, green, green, green},
{indigo, indigo, indigo, indigo, indigo, indigo, indigo, indigo, indigo},
{purple, purple, purple, purple, purple, purple, purple, purple, purple}
}
축마다 2 개 방향 트위스트 : 같이 예를 들어, 당신은 큐브를 나타낼 수 트위스트, 택일 적으로 6 축, 축마다 3 개의 트위스트), 또는 두 개의 회전 조작과 트위스트를 사용하여 inverseRotate[simpleTwist[rotate[cube], ...], ...]
과 같은 효과를 생성 할 수 있다고 가정합니다.
필요한 코드를 확인하려면 표현에서 실제 개체로 매핑해야합니다. 아마도 하나의 머리 또는 꼬리를있는 동전에 대한 예를 보여 좋을 것이다 : 그것은 목록과 같은 기본 데이터 구조와 개체를 표현하기 쉽지 않은 경우
newCoin[] := {heads}
flipCoin[coin_] := {If[coin[[0]]==heads, tails, heads]}
이 더 복잡 할 수 있습니다.
이newCube[] := {
/red, red, red\ /orange, orange, orange\
|red, red, red| |orange, orange, orange|
\red, red, red/, \orange, orange, orange/, ...
}
그러나 행렬이 함께 바느질하는 방법을 쉽게 표현할 수없는 : 당신은 같은 행렬로 큐브를 나타낼 수 있습니다. 따라서 목록에서의 순서는 임의적입니다.
(최악의 경우 귀하의 표현에서 각 슬롯을 임의의 번호를 부여, 당신은 그 공 (53)을 통해 레이블,하지만 당신은 그것에 대해 더 우아 할 수 있습니다 : 당신은 여전히 혼동하는 경우
, 당신은이 작업을 수행 할 수 있습니다). 그런 다음 진정한 루빅 큐브로 각면에 그 숫자를 씁니다. 그런 다음 작업을 수행 할 때 새 위치를 적어 두십시오. 이것은 순열이라고 불리며, 그 특수한 이동/비틀림이 당신의 세미 그룹 데이터 구조에 유도되도록했습니다. 앞서 언급했듯이, 이들 중 상당수가 18 가지이며, 모두 다 써야합니다. 그럼 당신은 같은 것을 할 수 있습니다 : 당신은 FindPermutation 때마다 호출보다는 같은 컴퓨터 과학 트릭이를 최적화 할 수 있습니다
newCube[] := {0,1,2, 3,4,5, 6,7,8, ...53}
permutations = {
{12,15,0, 3,4,5, 6,7,8, ...}, (*figure these out yourself*)
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . },
{. . . }
}
twistCube[cube_, moveNumber_] := Permute[
cube,
FindPermutation[permutations[[moveNumber]]]
]
만들기를 permutations = FindPermutation /@ {...}
- 1. Rubik의 큐브 스캐닝 알고리즘
- 2. Rubik의 큐브 해결 API (Java)
- 3. Rubik의 큐브 (회전 및 추적)
- 4. 자바의 입방체 B- 스플라인 곡선
- 5. 입방체 베지에 어떻게 할 수 있습니까?
- 6. 안드로이드 3D 입방체 회전을위한 방향 센서
- 7. 입방체 모양을 가진 3d에서 UIIMageView를 생성하십시오
- 8. Python 클래스 표현 방법
- 9. 동적 표현 트리 방법
- 10. 표현 평등을 테스트하는 방법
- 11. 안드로이드의 구형 표현 방법
- 12. 표현
- 13. 부호없는 int/long 표현 방법
- 14. 표현 - 인식 할 수없는 방법
- 15. 표현 파싱 : 토큰 화하는 방법
- 16. 엔티티 표현
- 17. 내가 같은 표현 만든 표현
- 18. 표현 변경하기
- 19. 그래프 및 트리 표현
- 20. C#을 표현
- 21. OpenGL에서 입방체 그리기. 반복 코드가 짧지 만 작동하지 않습니다.
- 22. Python/matplotlib : 3D 입방체, 구 및 벡터 플로팅?
- 23. 애니메이션 이징/iOS 애니메이션 대 CSS3 입방체 베지터
- 24. 입방체 베 지어 곡선 : 최대 기울기 및 충돌 회피?
- 25. 람다 표현 예
- 26. 단축 긴 표현
- 27. 목록의 인쇄 된 표현
- 28. Magento 컬렉션 표현
- 29. ASP.NET 표현 <%= ...%> C#을 표현
- 30. 표현 템플릿에서 비 const 표현 클래스가 필요합니다.
http://demonstrations.wolfram.com/RubiksCube/ –