본문 바로가기
프로그램

[파이썬] 터틀(turtle)에서 주사위 정육면체 코드에서 그룹화해서 이동 및 각도 변경해서 그리기

by 오디세이99 2023. 5. 6.
728x90
반응형

import turtle
import math

def draw_cube(t, x, y, size):
    t.penup()
    t.goto(x, y)
    t.pendown()

    for _ in range(2):   # 직육면체 그리기
        t.forward(size)
        t.left(90)
        t.forward(size)
        t.left(90)
    
    t.left(90)            # 좌상으로 이동
    t.forward(size)
    
    t.right(45)           # 윗면
    t.forward(size//2)
    t.right(45)
    t.forward(size)
    t.right(135)
    t.forward(size//2)
    
    t.right(180)          # 오른쪽 옆면
    t.forward(size//2)
    t.right(135)
    t.forward(size)
    t.right(45)
    t.forward(size//2)
    
    t.penup()              # 원 그리기 시작. goto를 사용하면 좌표가 바뀌기 때문에 forward로 현재 위치와 각도에서 이동하는 것으로 함
    r = size//8            # 반지름
    t.right(135)           # 원 그리기 위해 중간으로 이동
    t.forward(size//2)
    t.left(90)
    t.forward(size//2 - r) # 원을 가운데 위치하기 위해 계산
    t.pendown()
    
    t.right(90)
    t.begin_fill()
    t.fillcolor('black')
    t.circle(r)
    t.end_fill()
    

def draw_group(t, x, y, length, angle):
    t.penup()
    t.goto(x, y)
    t.pendown()
    t.setheading(angle)          # 각도 바꾸기
    draw_cube(t, x, y, length)

t = turtle.Turtle()
t.hideturtle()
t.speed(0)
t.pencolor('black')

# 그룹으로 그리기
draw_group(t, 0, 0, 60, 0)
draw_group(t, 300, 0, 100, 45)
draw_group(t, 0, 300, 150, 90)
draw_group(t, 300, 300, 200, 135)

turtle.done()

try:
    turtle.bye()
except:
    print("bye")

728x90
반응형

댓글