본문 바로가기
  • Top Genius in the world
거북이 그림

[거북이그림] 여덟번째 <다각형 그리기>

by Mr.Algo 2024. 4. 30.
728x90
반응형

[key word] 원, 타원, 다각형, 별, 그라데이션, 점의 좌표

파이썬 실습창을 열 수 있습니다.실습창 열기

 

다각형 그리기

원은 평면상의 한 점에서 같은 거리에 있는 점들의 모임입니다. 그러므로 원을 그리려면 반지름을 일정하게 하고, 중심점에서 0도 부터 360도까지 각도를 바꾸면서 반지름 거리에 점을 찍으면 됩니다.

 

1. 점으로 그린 원

다음이 원을 그리는 코드입니다.

from turtle import*
from math import*
for d in range(0,360+1, 5):   # 각도를 0부터 360까지 5도씩 증가
    a=pi*d/180                # 각도를 라디안으로 바꿈
    x=120*cos(a)              # 반지름 120인 곳의 X좌표, 원리는 아래의 '참고'보기
    y=120*sin(a)              # 반지름 120인 곳의 Y좌표
    up(); goto(x,y); down(); dot(3,'green');   # 점찍을 곳으로 가서 크기 3인 점을 찍음
ht()                                           # 거북이 숨김(hide turtle)
done()

 

 

[참고] 원둘레 점의 좌표

더보기

원둘레 점의 좌표

원점(o)에서 각도 a, 거리 r인 점(p)의 좌표를 구하여 봅시다.

      cos(a) = x / r     그러므로 x = r * cos(a)

      sin(a) = y / r       그러므로 y = r * sin(a)

즉, 점 p의 좌표는 ( r * cos(a), r * sin(a)) 입니다.

 

2. 선으로 그린 원

점과 점 사이를 선으로 연결하면 더욱 원 같이 보입니다.

from turtle import*
from math import*
color('green')
flag=1                                       # 처음인것을 의미
for d in range(0,360+1, 5):
    a=pi*d/180
    x=120*cos(a)
    y=120*sin(a)
    if flag:up(); goto(x,y); down(); flag=0  #처음이면 선을 그리지 않고 이동
    else:goto(x,y)                           # 처음이 아니면 선을 그으면서 이동 
ht()    
done()

 

3. 타원 그리기

타원(ellipse,앨립스)은 x축 반지름과 y축 반지름을 다르게 하면 그릴 수 있습니다.

from turtle import*
from math import*
color('green')
flag=1
for d in range(0,360+1, 5):
    a=pi*d/180
    x=120*cos(a)     # x축의 반지름과  
    y=60*sin(a)      # y축의 반지름이 다릅니다.
    if flag:up(); goto(x,y); down(); flag=0
    else: goto(x,y)
ht()    
done()

 

4. 중심점 옮기기

중심점을 옮길 수 있습니다.

from turtle import*
from math import*
color('green')
flag=1
for d in range(0,360+1,5):
    a=pi*d/180
    x=120*cos(a)+50    # 중심점을 x축은 오른쪽으로 50
    y=120*sin(a)+80    # y축은 위로 80 이동
    if flag: up(); goto(x,y); down(); flag=0
    else:goto(x,y)
ht()    
done()

 

 

5. 다각형 그리기

다각형(polygon,폴리간)을 그릴 수 있습니다.

다각형은 각도 변화를 크게하면 됩니다.

3각형은 120도(=360//3), 4각형은 90도(=360//4) 등입니다.

from turtle import*
from math import*
color('green')
flag=1
for d in range(0,360+1,360//4):
    a=pi*d/180
    x=120*cos(a)   
    y=120*sin(a) 
    if flag: up(); goto(x,y); down(); flag=0
    else:goto(x,y)
ht()    
done()

'''
5번 줄의 증가값(stride)는 각형을 정합니다.
4각형은 360//4로서 90과 같습니다.
5각형은 360//5
'''

 

 

6. 별 그리기

별 그리기는 원을 2바퀴 돌며, 원둘레의 5분의 2씩 증가하면 됩니다. 

 

from turtle import*
from math import*
color('green')
flag=1
for d in range(0,360*2+1, 360*2//5):   # 2바퀴돌며, 5분의 2씩 증가
    a=pi*d/180
    x=120*cos(a)   
    y=120*sin(a) 
    if flag: up(); goto(x,y); down(); flag=0
    else:goto(x,y)
ht()    
done()

 

 

7. 톱니바퀴 그리기

톱니바퀴(gear) 모습은 반지름의 크기를 크고 작게 반복 시키면 됩니다.

 

from turtle import*
from math import*
color('green')
flag=1
r=80                         # 반지름 80 (임의의 크기)
for d in range(0,360+1,5):   # 5는 톱니의 간격
    a=pi*d/180
    x=r*cos(a)               # 반지름 적용 
    y=r*sin(a)               # 반지름 적용  
    if flag: up(); goto(x,y); down(); flag=0
    else:goto(x,y)
    r=200-r                  # 반지름이 80과 120 반복
ht()    
done()

 

8. 나선 그리기

나선(spiral)은 여러 바퀴 돌면서 반지름을 각도에 비례하여 증가시키면 됩니다.

 

from turtle import*
from math import*
color('green')
flag=1
for d in range(0,360*5+1,5):  # 5바퀴 돌면서
    a=pi*d/180
    r=d/10                    # 각도의 10분의 1을 반지름으로 사용   
    x=r*cos(a)                # 반지름 r
    y=r*sin(a)                # 반지름 r
    if flag: up(); goto(x,y); down(); flag=0
    else:goto(x,y)
ht()    
done()

 

 

9. 약간의 변화

선의 두께 변화와 색의 그라데이션(gradation)을 주었습니다.

 

from turtle import*
from math import*
color('green')
flag=1
for d in range(0,360*5+1,5):
    color(0,d//5,0)     #녹색의 그라데이션
    width(d//50)        # 선의 두께 변화 
    a=pi*d/180
    r=d/10
    x=r*cos(a)   
    y=r*sin(a) 
    if flag: up(); goto(x,y); down(); flag=0
    else:goto(x,y)
ht()    
done()

 

재미있는 그림들을 그려보세요.

게임보다 재미있으면 제대로 미친(?) 상태입니다.

미치면 무엇이든 이루어 냅니다.

무언가에 미쳐보세요.

안녕!

728x90
반응형