포인트라는 목록에 데카르트 포인트 세트가 있다고 가정합니다. 극각에 따라 분류해야 합니다. 극각은 0과 2*PI 범위에서 다양합니다. 일부 포인트의 극각이 같으면 원점에서 해당 포인트의 거리를 기준으로 정렬합니다.
따라서 입력이 점 =[(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) ]
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 비교기 기능 key()를 정의합니다. 시간이 걸립니다.
- atan :=x[1]/x[0]의 tan-inverse
- 쌍(atan, x[1]^2+x[0]^2) 반환 atan>=0 그렇지 않으면 (2*pi + atan, x[0]^2+x[1]^2)리>
- 그런 다음 비교기 기능 키()를 사용하여 포인트 정렬
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
mathdef solve(points) 가져오기:def key(x):atan =math.atan2(x[1], x[0]) return (atan, x[1]**2+x[0]** 2) atan>=0인 경우 else (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)]print(풀(점))
입력
[(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)]사전>