본문 바로가기

Program language/Python

turtle을 이용한 1삼각형, 3원 한붓 그리기

반응형

이번 포스팅에서 해볼것은 turtle을 이용해서 삼각형 꼭지점에

애매한 각도로 매달린 원형을 떼지 않고 그리는 것을 해보겠습니다.

 

제가 이 문제를 처음 접했을때 그냥 삼각형을 그리고

꼭지점 좌표에 원을 그리면 되지 않을까? 라고 생각했었습니다.

 

실제로 해보니 그렇게 그리는게 더 힘들것 같네요.

 

import turtle as t

turtle을 쓰려면 당연히 해야하는 선언 입니다.

as t는 turtle을 다 안쓰고 t만 쓰려고 설정했습니다.

 

 

t.shape()
t.ht()
t.speed(10)

t.shape()는 커서 모양을 지정하는 것 입니다. (거북이 모양을 원하신다면 t.shape("turtle") )

t.ht()는 hide turtle의 약자로 커서를 숨기는 것 입니다.

t.speed(10)은 10의 속도로 그리기를 설정합니다.

 

 

t.right(180)

t.right(180)은 각도를 오른쪽으로 180도 돌리는 것입니다.

보통 원하는 모양을 180도 돌리는 효과를 가집니다.

(정확히 상하반전은 아니지만 비슷한 효과 입니다.)

 

 

for i in range(3):

for문을 3번 실행하기 위해 range(3)을 했습니다.

위에 그리고자 하는 도형이 삼각형이기 때문에 3 입니다.

 

 

    t.forward(60)
    t.right(360 / 3)
    t.circle(30)
    t.right(360 / 3)

위에 도형을 한번에 그리기 위해서는 삼각형을 그리는 중간에 원도 같이 그려야 합니다.

삼각형의 내각의 총 합은 360도 이므로 360 / 3 을 하여서

삼각형의 한변을 그리고 각도를 틀어서 원을 그리고

다시 또 한변을 그리고 각도를 틀어서 원을 그리고

마지막으로 한변을 그리고 각도를 틀어서 원을 그리면 끝나게 됩니다.

 

어떻게 되었을까요 ?

위에 그림과 다른 꼭지점에 정직하게 붙어있는 원이 그려졌습니다.

최종 결과처럼 애매하게 매달리려면 어떻게 해야할까요 ?

 

여기서 한가지 아이디어를 내야합니다.

삼각형의 한변을 그리고 삼각형의 내각인 120도를 돌때

돌다가 중간에 멈추어서 원을 그려야 합니다.

그래서 아래와 같이 수정해보았습니다.

 

 

    t.forward(60)
    t.right( (360 / 3) * (9.9 / 10) )
    t.circle(30)
    t.right( (360 / 3) * (0.1 / 10) )

보기에 복잡해 보이지만 이해하면 간단합니다.

360 / 3 인 삼각형의 내각 120도를 돌지만

원을 그리기 전에 99% 돌고

원을 그리고 난 후에 나머지 덜 돌았던 1%를 도는 것입니다.

 

저는 위에 아이디어였던 '내각을 돌다말고 원을 그린다'를 이런식으로 표현한 것 입니다.

꼭 이것만이 정답은 아닙니다. 다른 다양한 방법을 찾아보시면 좋을 것 같습니다.

 

 

* 전체 코드

import turtle as t

t.shape()
t.ht()
t.speed(10)

t.right(180)
for i in range(3):
    t.forward(60)
    t.right( (360 / 3) * (9.9 / 10) )
    t.circle(30)
    t.right( (360 / 3) * (0.1 / 10) )

여기에서 다양하게 숫자를 바꿔가며 이해하면 좋습니다.

상하를 반전하고 싶다면 t.right(180)을 주석처리 해보기도 하고

좌우를 반전하고 싶다면 9.9와 0.1의 자리를 바꿔보시기 바랍니다.

반응형