6x6 그리드에서 3 가지 항목의 위치를 관리하는 클래스를 디자인하는 가장 효율적인 방법에 대한 지침을 찾고 있습니다. 그리드의 항목은 이동하거나 위치를 변경할 수 없지만 전체 그리드는 시계 방향/반 시계 방향으로 90 도씩 회전 할 수 있으며 iOS에서 실시간으로 그리드의 사용자 터치/드래그 조작에 따라 가로/세로로 뒤집을 수 있습니다 장치. 전체 그리드를 회전 및/또는 뒤집기의 결과로 그리드의 3 개 항목은 회전되지 않은 "위치 참조"그리드를 기반으로 서로 다른 "절대"위치에있게됩니다. 그리드의 각 "변형"후에 가장 효율적인 방식으로 결정하려고하는 것은 이러한 새로운 항목 위치입니다.iOS에서 회전/뒤집기 후 그리드의 항목 위치를 효율적으로 관리하는 방법
: 내가 달성하기 위해 노력하고 무엇을 설명하기 위해
, 나는 왼쪽 상단 모서리가 아래 다음 오른쪽에 위치 0와 숫자 증가되는 그리드의 위치를 번호입니다 ... 기능은 다음 을 고려 위치 참조 그리드 :
-------------------------
| 0 | 1 | 2 | 3 | 4 | 5 |
-------------------------
| 6 | 7 | 8 | 9 | 10| 11|
-------------------------
| 12| 13| 14| 15| 16| 17|
-------------------------
| 18| 19| 20| 21| 22| 23|
-------------------------
| 24| 25| 26| 27| 28| 29|
-------------------------
| 30| 31| 32| 33| 34| 35|
-------------------------
나는 항상/어떤 회전에 관계없이이 번호를 사용하여 그리드에서 항목의 위치를 참조 그리드에 적용되는 변환 플립 계획입니다. 따라서, 예를 들어, 나는 위치에 A = 7 항목, B = 9, C = 14
원본이있는 경우 :
-------------------------
| 0 | 1 | 2 | 3 | 4 | 5 |
-------------------------
| 6 | A | 8 | B | 10| 11|
-------------------------
| 12| 13| C | 15| 16| 17|
-------------------------
| 18| 19| 20| 21| 22| 23|
-------------------------
| 24| 25| 26| 27| 28| 29|
-------------------------
| 30| 31| 32| 33| 34| 35|
-------------------------
를 90도 시계 방향으로 격자를 회전, 새 항목의 위치가 될 것입니다 = 10, B = 22, C = 15이다.
회전 시계 방향으로 90도 :
-------------------------
| 0 | 1 | 2 | 3 | 4 | 5 |
-------------------------
| 6 | 7 | 8 | 9 | A | 11|
-------------------------
| 12| 13| 14| C | 16| 17|
-------------------------
| 18| 19| 20| 21| B | 23|
-------------------------
| 24| 25| 26| 27| 28| 29|
-------------------------
| 30| 31| 32| 33| 34| 35|
-------------------------
(90, 180, 각면에 270도 0), 각각의 아이템은 정확히 8 개 알려진 위치에있는에 기초하여 상기 그리드 단지 8 개의 가능한 방향이있다 그리드의 방향. 따라서 8 방향 배열 각각에 대해 3 가지 항목의 절대 위치를 포함하는 8 개 3 항목 배열을 하드 코딩 할 수 있습니다. 배열 당 하나의 배열입니다. 일단 어떤 변형 후에 그리드가 어떤 방향인지 알게되면 그리드 방향에 해당하는 항목 위치의 올바른 3 항목 항목 배열을 가져 와서 3 항목의 새로운 위치를 얻습니다.
그리드 변환이 iOS에서의 터치 조작에 직접적으로 반응하고 그리드에 더 많은 항목이있을 수 있기 때문에 한 번에 여러 그리드에 대해이 위치 검색을 수행해야하므로, 코딩은 이동하거나 그리드의 회전 또는 뒤집기가 발생하면 그리드에서 항목의 위치를 계산하거나 동적으로 결정하는 좀 더 정교한 방법이있는 경우에 사용할 수있는 방법입니다.
모든 조언, 의견, 제안은 대단히 감사하겠습니다.
미리 감사드립니다.
감사합니다. 나는 행렬 수학에 익숙하지만 비교적 적은 수의 항목과 격자를 다루는 데 다소 과잉이라고 생각했습니다. 그럼에도 불구하고 내 구체적인 데이터와 관련된 귀하의 제안에 대해 몇 가지 질문이 있습니다. 더 많은 것을 위해 다음 주석을보십시오 ... – JavaJoe
당신은 보드의 중심을 (0,0)으로 설정하는 것을 말합니다. 그러나 그리드는 짝수 개의 행과 열을 가지므로 절대 셀 위치가 당신을 중심으로 사용하도록 제안하고 있습니다 포인트? 귀하의 설정'A = (2, -2)'및'(C = 1, -1)'에 기초하여, 원래 게시물의 셀 21을 포인트 (0,0)로 사용하는 것이 좋습니다. 그렇다면'B = (2,0)'이 아니라'B = (2, -1)'이됩니다. 또한, H 플립 이후, 포인트는 'A = (2,1)','B = (2, -1)','C = (1,1)'이므로 수학은 아웃. 이것이 마치 그래프 인 것처럼 그리드의 실제 중심 (셀이 아닌)을 점 (0,0)으로 표시해야하는 것처럼 보일 것입니다. – JavaJoe
@JavaJoe 짝수 개의 행과 열이있는 격자의 경우 셀 14, 15, 20 및 21을 경계로하는 선의 교차점을 원점으로 사용하는 것이 좋습니다. 점 '0,0'은 그리드의 셀이 아니며 선의 교차점입니다. 각 셀은 2 단위 넓이이며 점은 홀수 좌표에 있고 짝수 좌표에있는 선 (내 대답에는 3 대신 2를 사용했습니다 - 틀렸고 현재 고정되어 있습니다). 그리드에 홀수의 행과 열이있는 경우 원점을 중앙 셀로 이동하고 1 단위 폭의 셀을 사용합니다. – dasblinkenlight