Tọa độ lục giác: Cực đến Cartesian


11

Wikipedia nói về tọa độ cực :

Trong toán học, hệ tọa độ cực là hệ tọa độ hai chiều, trong đó mỗi điểm trên mặt phẳng được xác định bởi khoảng cách từ điểm tham chiếu và góc từ hướng tham chiếu.

Điều này có vẻ hoàn hảo để mô tả lưới lục giác. Lấy lưới lục giác sau đây làm ví dụ:

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

Điểm tham chiếu của chúng tôi sẽ là tâm của hình lục giác ('J') và góc tham chiếu của chúng tôi sẽ nằm ở góc trên cùng bên trái của hình lục giác ('A'). Tuy nhiên, chúng tôi sẽ mô tả góc theo số lượng các bước theo chiều kim đồng hồ xung quanh bên ngoài của hình lục giác từ điểm này, không phải theo góc. Vì vậy, chúng tôi sẽ gọi nó là "Số bước" thay vì góc.

Ví dụ: 'C' ở (2, 2) vì nó có bán kính là 2 (vì nó cách trung tâm hai vòng, 'J') và số bước là 2 (2 bước theo chiều kim đồng hồ từ 'A '). Tương tự, 'O' nằm ở (1, 3), vì nó nằm cách trung tâm một vòng và ba bước theo chiều kim đồng hồ từ 'E' (nằm trên góc tham chiếu).

Để hoàn thiện, 'J' nằm ở (0, 0), vì bạn cần 0 bước ra và 0 bước theo chiều kim đồng hồ để đạt được nó.

Bây giờ, bạn cũng có thể mô tả một hình lục giác với tọa độ Descartes , nhưng vì phần bù này hơi lạ. Giống như với tọa độ cực của chúng ta, chúng ta sẽ đặt tâm ở (0, 0). Mỗi không gian cũng chiếm một tọa độ, vì vậy 'K' nằm ở (2, 0), không phải (1, 0). Điều này sẽ đặt 'A' tại (-2, 2) và 'O' tại (1, -1).

Các thách thức

Cho tọa độ lục giác cực, xuất ra tọa độ tương tự trong tọa độ Descartes. Bạn có thể lấy các coords này và đưa ra câu trả lời ở bất kỳ định dạng hợp lý nào. Điều này có nghĩa là bạn có thể đảo ngược thứ tự của đầu vào nếu bạn muốn. Điều này cũng có nghĩa là bạn có thể xuất các coords dưới dạng (Y, X), nhưng nếu bạn làm như vậy, vui lòng đề cập đến điều này trong câu trả lời của bạn để tránh nhầm lẫn.

Bạn không phải xử lý bán kính âm, nhưng bạn có thể có các góc âm hoặc các góc vượt quá vòng quay hoàn toàn xung quanh hình lục giác. Ví dụ: bạn có thể nhận (1, 10) hoặc (1, -2) làm đầu vào. Cả hai đều tương ứng với 'N' trong hình lục giác trước đó của chúng tôi. Bạn không phải xử lý các số nguyên cho đầu vào.

IO mẫu

#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
ai đó trả lời điều này trong hexagony ...
FlipTack

Để làm rõ, các đơn vị được sử dụng để đo góc phụ thuộc vào bán kính? (ví dụ (1, 1) là một góc 60 ° so với góc tham chiếu, nhưng (2, 1) chỉ 30 ° vì nó nằm xa hơn và do đó có nhiều chữ cái hơn ở đó). Câu hỏi dường như ngụ ý điều đó, nhưng đó không phải là cách hoạt động bình thường của tọa độ cực, vì vậy có thể đáng để giải thích rằng bạn là differnet.

Chúng ta chỉ phải xem xét một khoảng cách lên đến 2 từ nguồn gốc, hay nó phải làm việc xa hơn thế?
Cấp sông St

@ ais523 Có, nó được đo theo các bước không phải là góc. Tôi đã làm rõ rằng một chút trong bài viết.
James

@LevelRiverSt Không, về mặt lý thuyết nó sẽ hoạt động cho bất kỳ bán kính nào. Bài kiểm tra IO tăng lên 10.
James

Câu trả lời:


3

JavaScript (ES6), 93 byte

(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]

Đoạn kiểm tra:


Bạn phải xử lý các góc đi nhiều hơn một cuộc cách mạng đầy đủ; mã của bạn dường như không hoạt động (1, -7).
Neil

1

JavaScript (ES6), 95 byte

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]

Giải thích: Giải pháp cho góc 0 chỉ đơn giản -r,r, vì vậy chúng tôi bắt đầu tại điểm đó. Nếu góc là âm, chúng ta thêm vào toàn bộ hình lục giác và tự gọi mình theo cách đệ quy, nếu không chúng ta bắt đầu đi bộ xung quanh hình lục giác bằng một d,e=2,0bước. Khi có thể, chúng tôi nhảy rcác bước như vậy, sau đó xoay bước sử dụng công thức d+e*3>>1,e-d>>1để tiến tới phía bên cạnh. Cuối cùng chúng tôi thực hiện bất kỳ bước còn lại để đạt đến đích của chúng tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.