พิกัดหกเหลี่ยม: ขั้วโลกกับคาร์ทีเซียน


11

Wikipedia พูดเกี่ยวกับพิกัดเชิงขั้ว :

ในวิชาคณิตศาสตร์ระบบพิกัดเชิงขั้วเป็นระบบพิกัดสองมิติซึ่งแต่ละจุดบนระนาบจะถูกกำหนดโดยระยะทางจากจุดอ้างอิงและมุมจากทิศทางอ้างอิง

ดูเหมือนว่าสมบูรณ์แบบสำหรับการอธิบายกริดหกเหลี่ยม ใช้ตารางหกเหลี่ยมดังต่อไปนี้:

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

จุดอ้างอิงของเราจะเป็นจุดศูนย์กลางของรูปหกเหลี่ยม ('J') และมุมอ้างอิงของเราจะอยู่ที่มุมซ้ายบนของรูปหกเหลี่ยม ('A') อย่างไรก็ตามเราจะอธิบายมุมในแง่ของจำนวนขั้นตอนตามเข็มนาฬิการอบด้านนอกของรูปหกเหลี่ยมจากจุดนี้ไม่ใช่มุม ดังนั้นเราจะเรียกมันว่า "หมายเลขขั้นตอน" แทนที่จะเป็นมุม

ตัวอย่างเช่น 'C' อยู่ที่ (2, 2) เนื่องจากมีรัศมี 2 (เนื่องจากมีวงแหวนสองวงอยู่ห่างจากศูนย์กลาง 'J') และหมายเลขขั้นตอนที่ 2 (2 ตามเข็มนาฬิกาไปข้างหน้าจาก 'A ') ในทำนองเดียวกัน 'O' อยู่ที่ (1, 3) เนื่องจากเป็นวงแหวนหนึ่งห่างจากจุดศูนย์กลางและสามก้าวตามเข็มนาฬิกาไปข้างหน้าจาก 'E' (ซึ่งอยู่ในมุมอ้างอิง)

เพื่อความสมบูรณ์ 'J' อยู่ที่ (0, 0) เนื่องจากคุณต้องการ 0 ก้าวและ 0 ก้าวตามเข็มนาฬิกาเพื่อไปให้ถึง

ตอนนี้คุณยังสามารถอธิบายรูปหกเหลี่ยมด้วยพิกัดคาร์ทีเซียนได้แต่เนื่องจากการชดเชยตรงนี้มันแปลกเล็กน้อย เช่นเดียวกับพิกัดเชิงขั้วของเราเราจะใส่จุดศูนย์กลางที่ (0, 0) แต่ละพื้นที่ใช้พิกัดร่วมกันดังนั้น 'K' จึงอยู่ที่ (2, 0) ไม่ใช่ (1, 0) สิ่งนี้จะใส่ 'A' ที่ (-2, 2) และ 'O' ที่ (1, -1)

ความท้าทาย

รับพิกัดหกเหลี่ยมเชิงขั้วเอาท์พุทพิกัดเดียวกันในพิกัดคาร์ทีเซียน คุณสามารถรับ coords เหล่านี้และออกคำตอบในรูปแบบที่เหมาะสม ซึ่งหมายความว่าคุณสามารถกลับลำดับของอินพุตได้หากต้องการ นี่ก็หมายความว่าคุณสามารถส่งออก coords เป็น (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
คนที่ตอบคำถามนี้ใน hexagony ...
FlipTack

เพื่อความกระจ่างแจ้งหน่วยที่ใช้วัดมุมขึ้นอยู่กับรัศมีหรือไม่? (เช่น (1, 1) คือมุม 60 °จากมุมอ้างอิง แต่ (2, 1) เพียง 30 °เพราะมันอยู่ไกลออกไปและทำให้มีตัวอักษรมากขึ้น) คำถามดูเหมือนจะบอกเป็นนัยว่า แต่นั่นไม่ใช่วิธีปกติในการทำงานของพิกัดเชิงขั้วดังนั้นมันอาจคุ้มค่าที่จะอธิบายว่าคุณเป็น differnet

เราต้องพิจารณาระยะทางสูงสุด 2 จากแหล่งกำเนิดหรือต้องทำงานไกลกว่านั้นหรือไม่?
เลเวลริเวอร์เซนต์

@ ais523 ใช่มันวัดเป็นขั้น ๆไม่ใช่มุม ฉันชี้แจงว่าเล็กน้อยในการโพสต์
James

@ LevelRiverSt ไม่มันควรจะทำงานในทางทฤษฎีสำหรับรัศมีใด ๆ การทดสอบ IO เพิ่มขึ้นถึง 10
James

คำตอบ:


3

JavaScript (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)รหัสของคุณดูเหมือนจะไม่ทำงานให้
Neil

1

JavaScript (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.