[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()
재미있는 그림들을 그려보세요.
게임보다 재미있으면 제대로 미친(?) 상태입니다.
미치면 무엇이든 이루어 냅니다.
무언가에 미쳐보세요.
안녕!
'거북이 그림' 카테고리의 다른 글
[거북이그림] 일곱번째 <사인 곡선> (1) | 2024.04.28 |
---|---|
[거북이그림] 여섯번째 <나선 그리기> (1) | 2024.04.27 |
[거북이그림] 다섯번째 <해바라기> (0) | 2024.04.23 |
[거북이그림] 네번째 <에펠 탑> (0) | 2024.04.10 |
[거북이그림] 두번째 <다각형 놀이> (0) | 2024.03.31 |