मान लीजिए हमारे पास points नामक लिस्ट में कार्टेशियन पॉइंट्स का एक सेट है। हमें उन्हें उनके पोलर एंगल के आधार पर सॉर्ट करना है। पोलर एंगल 0 और 2*PI की रेंज में भिन्न होते हैं। यदि कुछ पॉइंट्स के समान पोलर एंगल हैं, तो उन्हें उस पॉइंट की मूल बिंदु से दूरी के आधार पर व्यवस्थित करें।
उदाहरण के लिए, यदि इनपुट है points = [(1,1), (1,-2),(-2,2),(5,4),(4,5),(2,3),(-3,4)], तो आउटपुट होगा [(5, 4), (1, 1), (4, 5), (2, 3), (-3, 4), (-2, 2), (1, -2)]।
समाधान दृष्टिकोण
प्रत्येक पॉइंट के लिए atan2(y, x) का उपयोग करके पोलर एंगल की गणना करें। यदि एंगल नेगेटिव है, तो 2*pi जोड़ें। (एंगल, दूरी^2) की टुपल द्वारा सॉर्ट करें।
- एक कम्पेरेटर फंक्शन
key()परिभाषित करें जोxलेता है। atan = atan2(x[1], x[0])की गणना करें।- यदि
atan >= 0तो(atan, x[1]^2+x[0]^2)लौटाएं अन्यथा(2*pi + atan, x[0]^2+x[1]^2)। key()कम्पेरेटर फंक्शन का उपयोग करकेpointsको सॉर्ट करें।
पायथन कार्यान्वयन
import math
def solve(points):
def key(x):
atan = math.atan2(x[1], x[0])
return (atan, x[1]**2+x[0]**2) if atan >= 0 else (2*math.pi + atan, x[0]**2+x[1]**2)
return sorted(points, key=key)
points = [(1,1), (1,-2),(-2,2),(5,4),(4,5),(2,3),(-3,4)]
print(solve(points))
इनपुट
[(1,1), (1,-2),(-2,2),(5,4),(4,5),(2,3),(-3,4)]
आउटपुट
[(5, 4), (1, 1), (4, 5), (2, 3), (-3, 4), (-2, 2), (1, -2)]