육각형 좌표 : 극좌표-직교 좌표


11

Wikipedia는 극좌표 에 대해 말합니다 :

수학에서 극 좌표계는 평면상의 각 점이 기준점으로부터의 거리와 기준 방향으로부터의 각도에 의해 결정되는 2 차원 좌표계이다.

이것은 6 각형 그리드를 설명하기에 완벽한 것 같습니다. 예를 들어 다음 6 각형 격자를 보자.

  A B C
 D E F G
H I J K L
 M N O P
  Q R S

기준점은 육각형의 중심 ( 'J')이되고 기준 각은 육각형의 왼쪽 상단 모서리 ( 'A')가됩니다. 그러나 각도가 아닌이 점에서 육각형 외부 주변 의 시계 방향 계단 수로 각도를 설명합니다 . 따라서 각도 대신 "스텝 번호"라고합니다.

예를 들어, 'C'는 반경이 2이고 (중심에서 2 개의 고리가 떨어져 있기 때문에 'J'), 2의 단계 번호 ( 'A에서 시계 방향으로 2 단계 앞으로 이동하기 때문에)는 (2, 2)입니다. '). 마찬가지로 'O'는 (1, 3)에 있습니다. 중심에서 1 개의 고리가 떨어져 있고 'E'(기준 각도에 있음)에서 시계 방향으로 3 단계 앞으로 이동하기 때문입니다.

완벽을 기하기 위해 'J'는 (0, 0)에 있습니다. 도달하려면 0 스텝 아웃과 0 스텝이 필요하기 때문입니다.

이제 직교 좌표 로 6 각형을 설명 할 수 있지만 오프셋으로 인해 조금 이상합니다. 극좌표와 마찬가지로 중심을 (0, 0)에 놓습니다. 각 공간도 좌표를 차지하므로 'K'는 (1, 0)이 아닌 (2, 0)입니다. 이렇게하면 'A'가 (-2, 2)에, 'O'가 (1, -1)에 놓입니다.

도전

극 6 각형 좌표가 주어지면 동일한 좌표를 직교 좌표로 출력합니다. 이 코드를 취하고 적절한 형식으로 답변을 출력 할 수 있습니다. 즉, 원하는 경우 입력 순서를 반대로 바꿀 수 있습니다. 이것은 또한 좌표를 (Y, X)로 출력 할 수 있음을 의미하지만, 그렇게하면 혼란을 피하기 위해 답에 언급하십시오.

음의 반지름을 처리 할 필요는 없지만 음의 각도 또는 육각형 주위에서 완전히 회전하는 각도 이상을 얻을 수 있습니다. 예를 들어 (1, 10) 또는 (1, -2)를 입력으로받을 수 있습니다. 이들은 이전 육각형의 'N'에 해당합니다. 입력을 위해 비정 수를 처리 할 필요가 없습니다 .

샘플 IO

#Polar      #Cartesian
(0, 0)      (0, 0)
(1, 2)      (2, 0)
(6, 0)      (-6, 6)
(2, -3)     (-3, -1)
(4, 23),    (-5, 3)
(5, -3),    (-8, 2)
(10, 50),   (-20, 0)
(6, 10),    (10, 2)
(8, 28),    (0, -8)
(8, -20),   (0, -8)

4
누군가가 육각형으로 이것을 대답 ...
FlipTack

명확히하기 위해 각도 측정에 사용되는 단위가 반지름에 의존합니까? (예 : (1, 1)은 기준 각도에서 60 °의 각도이지만 (2, 1)은 더 멀어지고 글자가 더 많기 때문에 30 °입니다.) 문제는 암시하는 것처럼 보이지만 이것이 극좌표가 작동하는 일반적인 방식은 아니므로 귀하의 차이점이 다르다고 설명하는 것이 좋습니다.

원점에서 최대 2의 거리 만 고려해야합니까, 아니면 그보다 더 멀리 떨어져 있어야합니까?
Level River St

@ ais523 예, 각도가 아닌 단계로 측정됩니다 . 게시물에 약간의 설명이 있습니다.
James

@LevelRiverSt 아니요, 이론적으로 모든 반경에서 작동해야합니다. 테스트 IO는 10까지 올라갑니다.
James

답변:


3

자바 스크립트 (ES6), 93 바이트

(r,d)=>[...Array(d+r*6)].map((_,i)=>x+="431013"[y+="122100"[i=i/r%6|0]-1,i]-2,x=y=-r)&&[x,-y]

테스트 스 니펫 :


완전한 회전 이상의 각도를 처리해야합니다. 귀하의 코드가 작동하지 않는 것 같습니다 (1, -7).

1

자바 스크립트 (ES6), 95 바이트

f=(r,t,x=-r,y=r,d=2,e=0)=>t<0?f(r,t+r*6):t>r?g(r,t-r,x+r*d,y+r*e,d+e*3>>1,e-d>>1):[x+t*d,y+t*e]

설명 : 영각에 대한 솔루션은 간단히 -r,r이므로 그 시점부터 시작합니다. 각도가 음수이면 전체 육각형을 추가하고 재귀 적으로 호출합니다. 그렇지 않으면 d,e=2,0단계를 따라 육각형 주위를 걷기 시작 합니다. 가능한 경우 r이러한 단계를 뛰어 넘고 수식 d+e*3>>1,e-d>>1을 사용하여 단계를 회전하여 다음 단계 로 진행합니다. 마지막으로 목적지에 도달하기 위해 남은 조치를 취합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.