สมมติว่าเรามีชุดจุดคาร์ทีเซียนในรายการที่เรียกว่าจุด เราต้องจัดเรียงพวกมันตามมุมขั้วของพวกมัน มุมขั้วจะแตกต่างกันไปในช่วง 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) ]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดคีย์ฟังก์ชันเปรียบเทียบ () นี่จะใช้เวลา x
- atan :=แทน-ผกผันของ x[1]/x[0]
- ส่งกลับคู่ (atan, x[1]^2+x[0]^2) ถ้า atan>=0 อย่างอื่น (2*pi + atan, x[0]^2+x[1]^2)
- จากนั้นจัดเรียงจุดโดยใช้คีย์ฟังก์ชันตัวเปรียบเทียบ ()
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
นำเข้า mathdef แก้(จุด):def key(x):atan =math.atan2(x[1], x[0]) return (atan, x[1]**2+x[0]** 2) ถ้า atan>=0 อื่น (2*math.pi + atan, x[0]**2+x[1]**2) ส่งคืน sorted(points, key=key)points =[(1,1) , (1,-2),(-2,2),(5,4),(4,5),(2,3),(-3,4)]พิมพ์(แก้(จุด))