
이번 포스팅에서 해볼것은 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의 자리를 바꿔보시기 바랍니다.
'Program language > Python' 카테고리의 다른 글
| 네이버 검색어 자동 변경 피하기 (0) | 2025.09.03 |
|---|---|
| 파이썬 데이터 수집 : 1. Requests (1) | 2025.07.19 |
| turtle을 이용한 다각형 연속 그리기 (0) | 2020.09.22 |