हेक्सागोनल निर्देशांक: ध्रुवीय से कार्टेशियन


11

ध्रुवीय निर्देशांक के बारे में विकिपीडिया कहता है :

गणित में, ध्रुवीय समन्वय प्रणाली एक दो-आयामी समन्वय प्रणाली है जिसमें एक विमान पर प्रत्येक बिंदु एक संदर्भ बिंदु से दूरी और एक संदर्भ दिशा से एक कोण द्वारा निर्धारित किया जाता है।

यह हेक्सागोनल ग्रिड का वर्णन करने के लिए एकदम सही लगता है। उदाहरण के लिए निम्न हेक्सागोनल ग्रिड लें:

  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) पर है क्योंकि इसमें 2 का त्रिज्या है (क्योंकि यह केंद्र से दो रिंग दूर है, 'J'), और 'A से आगे 2 (2 दक्षिणावर्त) की एक कदम संख्या ')। इसी तरह, 'O' (1, 3) पर है, क्योंकि यह केंद्र से एक रिंग दूर है, और 'E' (जो कि संदर्भ कोण पर है) से तीन क्लॉक वाइज आगे है।

पूर्णता के लिए, 'J' (0, 0) पर है, क्योंकि आपको इस तक पहुंचने के लिए 0 कदम और 0 कदम दक्षिणावर्त चाहिए।

अब, आप कार्टेशियन निर्देशांक के साथ एक हेक्सागोनल का भी वर्णन कर सकते हैं , लेकिन ऑफसेट के कारण यह थोड़ा अजीब है। हमारे ध्रुवीय निर्देशांक की तरह, हम केंद्र को (0, 0) पर रखेंगे। प्रत्येक स्थान एक समन्वय भी लेता है, इसलिए 'K' (2, 0) पर है, न कि (1, 0)। यह 'ए' (-2, 2), और 'ओ' पर (1, -1) लगाएगा।

चुनौती

ध्रुवीय हेक्सागोनल निर्देशांक को देखते हुए, कार्टेशियन निर्देशांक में समान निर्देशांक का उत्पादन करता है। आप इन कोर्ड्स, और आउटपुट को किसी भी उचित प्रारूप में ले सकते हैं। इसका मतलब है कि यदि आप चाहें तो इनपुट के क्रम को उल्टा कर सकते हैं। इसका मतलब यह भी है कि आप कोर्डर्स को (Y, X) के रूप में आउटपुट कर सकते हैं, लेकिन यदि आप ऐसा करते हैं, तो भ्रम से बचने के लिए कृपया अपने उत्तर में इसका उल्लेख करें।

आपको नकारात्मक त्रिज्या को संभालने की आवश्यकता नहीं है, लेकिन आप नकारात्मक कोण, या कोण प्राप्त कर सकते हैं जो षट्भुज के चारों ओर एक पूर्ण क्रांति से अधिक हो जाते हैं। उदाहरण के लिए, आपको इनपुट के रूप में (1, 10), या (1, -2) प्राप्त हो सकता है। ये दोनों हमारे पिछले षट्भुज में 'एन' के अनुरूप होंगे। आपको इनपुट के लिए गैर-पूर्णांकों को संभालने की आवश्यकता नहीं है।

नमूना 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 तक की दूरी पर विचार करना है, या क्या इससे आगे काम करना है?
लेवल रिवर सेंट

@ ais523 हाँ, इसे एंगल्स नहीं चरणों में मापा जाता है । मैंने स्पष्ट किया है कि पोस्ट में थोड़ा सा।
जेम्स

@LevelRiverSt नहीं, यह किसी भी त्रिज्या के लिए सैद्धांतिक रूप से काम करना चाहिए। परीक्षण IO 10. तक जाता है
जेम्स

जवाबों:


3

जावास्क्रिप्ट (ईएस 6), 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

जावास्क्रिप्ट (ईएस 6), 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अगली तरफ प्रगति के लिए कदम को घुमाते हैं । अंत में हम अपने गंतव्य तक पहुंचने के लिए कोई भी शेष कदम उठाते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.