Python Turtle이 있는 일반 별 다각형

낙서를 하는 사람이라면 인생의 어느 시점에서 오각형이나 다윗의 별에 낙서를 해본 적이 있을 것입니다.


오각형
다윗의 별






아마도 여러분 중 일부는 더 복잡한 별을 그리기 위해 더 많은 선을 추가하려고 시도했을 것입니다. 이 별에도 이름이 있다는 것을 알고 계셨습니까?


헵타그램
옥타그램






아무튼 이 별들을 파이썬으로 그려보면 재미있을 것 같다는 생각이 들었습니다. 이제 이 다각형을 그리기 시작하겠습니다.

별은 다각형입니까?



위에 있는 별들은 복잡한 폴리곤이라고 불리는 폴리곤의 한 종류라는 것이 밝혀졌습니다. 기본적으로 일반 폴리곤과 달리 복잡한 폴리곤에서는 선이 서로 교차합니다.


복잡한 다각형
별 모양의 복잡한 다각형






별 다각형은 복잡한 다각형의 한 유형입니다. 그리고 두 가지 유형이 있습니다. 종이에 다윗의 별을 그리려면 펜을 들어야 하지만 오각형을 그리려면 펜을 들 필요가 없다는 것을 깨달았을 것입니다. 전자 유형의 별을 일반 별 다각형이라고 하고 후자 유형을 축퇴 별 다각형이라고 합니다.


일반 팔각형
퇴화 팔각형






일반 별 다각형의 규칙



위에서 알 수 있듯이 여러 가지 방법으로 특정 수의 꼭짓점을 가진 별을 그릴 수 있습니다. 예를 들어 다음과 같이 9개의 정점이 있는 별 다각형을 그릴 수 있습니다.


방법 1
방법 2
방법 3






정점 1개 건너뛰기
정점 2개 건너뛰기
3개의 정점을 건너뛰었습니다.


진행 상황을 이해하려면 위의 각 다이어그램에서 건너뛴 정점의 수를 세십시오. 또한 2개의 꼭지점을 건너뛰면 별이 퇴화되지만 다른 경우에는 별이 규칙적입니다. 더 많은 정점을 건너뛸 수 있지만 결국 같은 별을 그리게 됩니다.

다음은 우리에게 유용한 규칙과 공식입니다.
  • N 정점이 있는 별의 경우 abs(N/2)-1 별을 그릴 수 있습니다.

    For example for a star with 9 vertices you can only draw abs(9/2)-1=3 stars



  • 별의 순서M는 건너뛴 정점의 수+1로 정의할 수 있습니다.

    So the possible orders for a 9-vertex star are 2, 3 and 4 for 1, 2 and 3 vertices skipped respectively


  • NM로 나눌 수 있는 경우 별은 퇴화
  • 입니다.

    별의 외각



    별을 추적하기 전에 각도, 특히 외부 각도를 알아야 합니다. 이것은 각 전진 후 거북이를 얼마나 돌려야 하는지를 알기 위한 것입니다. 엄격하게 공식을 유도하지는 않지만 다음을 이해하려고 노력할 것입니다.
  • 거북이가 한 지점에서 시작하여 돌았다가 돌아오면 항상 360도가 한 바퀴 완전히 회전합니다(또한 다각형의 외부 각도의 합이 360도인 이유도 있음)
  • 별의 경우 거북이가 여러 번 전체 회전을 수행함
  • 회전 수는 별의 순서와 같습니다 - M
  • 따라서 별의 외각의 합은 360*M
  • 이는 정점이 N인 일반 별의 경우 각 외부 각도 = 360*M/N를 의미합니다.

  • 충분히 설득력이 있기를 바랍니다

    충분한 대화를 나누자



    이제 우리가 가장 좋아하는 기념일 로고를 이해했으므로 Python 거북이로 코딩할 준비가 되었습니다. 회전 각도는 방금 논의한 대로 설정되어 있습니다.

    import turtle as t
    
    LENGTH=500
    
    def regular_star(n,m):
        """Draws a regular star polygon (not a degenerate one)
           n = number of pointies
           m = number of points to skip
        """
    
        angle = 360*m/n 
    
        for count in range(n):
           t.forward(LENGTH)
           t.right(angle)
    
    
    t.hideturtle()
    t.pensize(2)
    t.color("green")
    
    regular_star(103,51)
    


    위의 코드는 일반 별 다각형(펜을 떼지 않고 그릴 수 있는 것)만 그립니다. 퇴화별을 그리는 일은 다른 포스팅으로 남겨두겠습니다

    여기 103개의 뾰족한 별이 있습니다.



    예이!

    좋은 웹페이지 즐겨찾기