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

[거북이그림] 다섯번째 <해바라기>

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

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

 

 

1. 해바라기

이 그림을 그린 코드입니다.

from turtle import*
speed(0)
color('red')
for i in range(15):   # 15회 반복
    fd(200)           # 앞으로 200 픽셀
    lt(96)            # 좌회전 96도
ht()                  # 거북이 숨김(hide turtle)  
done()

 

이 그림은 5회 반복, 좌회전 144도.

 

1.  반복 회수와 좌회전

이 그림은 5회 반복, 좌회전 140도인데 끝이 꼭 맞지 않습니다.

 

끝을 꼭 맞게 하려면 반복 회수와 좌회전 각도(외각)를 어떻게 조정해야 할까요?

좌회전 각도의 배수가 360도(원의 1바퀴 각도)의 배수이면 끝이 꼭 맞게 됩니다.

즉,  좌회전 각도의 배수와 360의 최소 공배수를 구하면 됩니다.

다음 코드가 끝이 꼭 맞는 좌회전 각도와 반복 회수의 관계를 구하는 것입니다.

r=[]                            # 결과를 모을 예정 
for a in range(91,180):         # 좌회전 각도. 90보다 크고 180보다 작은 범위
    for i in range(1,1000):     # 반복 회수. 1000은 임의의 수
        if a*i%360==0:          # 각도의 배수가 360의 배수이면
            r.append((a,i))     # 좌회전 각도와 반복 회수를 튜플로 모음
            break               # 최소 배수만 구함. 더 큰 배수는 겹쳐서 그리게 됨
print(r)            

'''            
[(91, 360), (92, 90), (93, 120), (94, 180), (95, 72), (96, 15), 
(97, 360), (98, 180), (99, 40), (100, 18), (101, 360), (102, 60), 
(103, 360), (104, 45), (105, 24), (106, 180), (107, 360), (108, 10), 
(109, 360), (110, 36), (111, 120), (112, 45), (113, 360), (114, 60), 
(115, 72), (116, 90), (117, 40), (118, 180), (119, 360), (120, 3), 
(121, 360), (122, 180), (123, 120), (124, 90), (125, 72), (126, 20), 
(127, 360), (128, 45), (129, 120), (130, 36), (131, 360), (132, 30), 
(133, 360), (134, 180), (135, 8), (136, 45), (137, 360), (138, 60), 
(139, 360), (140, 18), (141, 120), (142, 180), (143, 360), (144, 5), 
(145, 72), (146, 180), (147, 120), (148, 90), (149, 360), (150, 12), 
(151, 360), (152, 45), (153, 40), (154, 180), (155, 72), (156, 30), 
(157, 360), (158, 180), (159, 120), (160, 9), (161, 360), (162, 20),
(163, 360), (164, 90), (165, 24), (166, 180), (167, 360), (168, 15), 
(169, 360), (170, 36), (171, 40), (172, 90), (173, 360), (174, 60),
(175, 72), (176, 45), (177, 120), (178, 180), (179, 360)]

이렇게 89가지 경우가 있네요.
'''

 

2.  해바라기 밭

임의의 위치에, 임의의 크기로, 임의의 해바라기를 그려봅시다.

해바라기 밭

소스 코드입니다.

더보기
from turtle import*
from random import*
# 위의 프로그램에서 찾은 쌍 중에서 반복 회수가 적은 것을 임의로 선택했습니다.
# 데이터를 바꾸어도 됩니다.
flower=[(96, 15),(99, 40), (100, 18),(105, 24),(108, 10),(110, 36), 
        (130, 36),(132, 30),(135, 8),(140, 18), (144, 5), (150, 12), 
        (156, 30),(160, 9),(162, 20),(165, 24),(168, 15),(171, 40)]
f=len(flower)                # 꽃의 종류
speed(0)
color('red')
for loop in range(30):       # 30송이의꽃(바꾸어도 됨)
    x=randint(-150,150)      # 꽃의 x좌표
    y=randint(-150,150)      # 꽃의 y좌표
    s=randint(10,100)        # 꽃의 크기
    r=randint(0,f-1)         # 곷 모양(인덱스는 꽃의 종류보다 1 작음) 
    a,n=flower[r]            # 좌회전 각도와 반복 회수 
    up(); goto(x,y); down()  # 꽃을 그릴 위치로 이동
    for i in range(n):       # 꽃을 그림
        fd(s)
        lt(a)
ht()    
done()

 

3. 아름다운 해바라기

꽃그림은 색이 있어야하지요?

from turtle import*
from random import*
# colormode(255)        # 파이썬 실습창이 아니면 주석을 해제하세요. 
flower=[(96, 15),(99, 40), (100, 18),(105, 24),(108, 10),(110, 36), 
        (130, 36),(132, 30),(135, 8),(140, 18), (144, 5), (150, 12), 
        (156, 30),(160, 9),(162, 20),(165, 24),(168, 15),(171, 40)]
f=len(flower)
speed(0)
for loop in range(30):
    r=randint(0,255)         # 이곳 추가. 빨강
    g=randint(0,255)         # 이곳 추가. 녹색
    b=randint(0,255)         # 이곳 추가. 파랑
    color(r,g,b)             # 이곳 추가. 색깔 만듬
    w=randint(1,3)           # 이곳 추가. 임의의 선 두께
    width(w)                 # 이곳 추가  
    x=randint(-150,150)
    y=randint(-150,150)
    s=randint(10,100)
    r=randint(0,f-1)
    a,n=flower[r]
    up(); goto(x,y); down()
    for i in range(n):
        fd(s)
        lt(a)
ht()    
done()

 

여러가지로 응용하여 보세요.

수고하셨습니다.

안녕!

728x90
반응형