Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 폴리곤을 초기 상태로 재설정하는 프로그램

<시간/>

n개의 꼭짓점, n개의 대칭축, n개의 회전점이 있는 다각형이 있다고 가정합니다. 다음은 뒤집는 축과 회전점에 해당됩니다.

  • n이 홀수이면 뒤집는 각 축은 한 꼭짓점과 반대쪽 변의 가운데만 통과합니다.
  • n이 짝수이면 축의 절반은 한 쌍의 반대 꼭짓점을 통과하고 나머지 절반은 한 쌍의 반대 변을 통과합니다.
  • 추종하는 두 축의 각도는 360/2n입니다.

이제 제공된 다각형을 회전합니다. n개의 서로 다른 유형의 회전자가 있으며 k-회전자는 k축에서 다각형을 시계 방향으로 (360 x k)/n도 회전합니다. 여러 쌍의 정수를 포함하는 목록 입력 목록이 있습니다. 쌍의 첫 번째 정수는 다각형이 뒤집힐 것인지 회전할 것인지를 나타냅니다. 첫 번째 정수가 1이면 다각형이 회전하고 2이면 다각형이 뒤집힙니다. 두 번째 정수는 k입니다. 폴리곤이 뒤집히면 k축에서 뒤집힙니다. 그렇지 않으면 회전하면 360/2n의 각도로 회전합니다. 그런 다음 목록이 비어 있지 않은 동안 회전 및 뒤집기가 수행됩니다.

여기서 우리의 임무는 폴리곤이 초기 위치로 재설정될 수 있도록 목록에 다른 요소를 추가하는 것입니다.

Python에서 폴리곤을 초기 상태로 재설정하는 프로그램

이미지는 두 가지 유형의 다각형의 회전 축을 지정합니다.

따라서 입력이 n =6, input_list =[[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]인 경우 출력은 다음과 같습니다. (1, 4)

변환 후 네 번째 축을 따라 회전하면 다각형이 초기 위치로 재설정됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • decision_var :=거짓
  • 위치:=0
  • input_list의 각 항목에 대해 다음을 수행합니다.
    • x :=항목[0]
    • y :=항목[1]
    • x가 1과 같으면
      • 위치 :=위치 + y
    • 그렇지 않으면
      • 위치 :=y - 위치
      • decision_var :=not(decision_var)
  • 위치 :=위치 모드 n
  • decision_var가 0이 아니면
    • 쌍(2, 위치) 반환
  • 그렇지 않으면
    • 쌍(1, n - 위치) 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(n, input_list):
   decision_var = False
   position = 0

   for item in input_list:
      x = item[0]
      y = item[1]
      if x == 1:
         position += y
      else:
         position = y - position
         decision_var = not decision_var
   position = position % n

   if decision_var:
      return (2, position)
   else:
      return (1, n - position)

print(solve(6, [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]))

입력

6, [[1, 2], [1, 4], [2, 3], [2, 5], [1, 6]]

출력

(1, 4)