[Logo] 정 N각별.. 다음단계

Posted by DamienRice 내가 만든 것/생각, 글 : 2008. 1. 31. 22:49
사용자 삽입 이미지

to myjung :l :n
    repeat :n [fd :l rt 120 fd :l lt (180*(:n-2)/:n)-60]
    rt 60
    repeat :n [fd :l rt 360/:n]
end

코드가 좀 지저분하긴 하네..


기존에 그린 정 N 각별의 내부 다각형을 선으로 이으니 별이 반듯한 모양이 아니고 휘어보인다. 이미 책에서도 나온 내용. 이를 반듯하게 하기 위해서는 어떤 생각을 해보아야 할까? 일단 각 귀퉁이에 있는 삼각형은 정삼각형이면 안되겠군..

코드를 약간 일반화하니 찌그러지지 않는 N각별이 나온다.

to myjung :l :n
    repeat :n [fd :l rt 2*(180-180*(:n-2)/:n) fd :l lt (180-180*(:n-2)/:n)]
end

사용자 삽입 이미지
리팩토링이 좀 필요한듯?

먼저, rt 이후의 값을 보자. 이 식은 위의 코드에서는 2*(180-180*(:n-2)/:n) 라고 적었는데, 괄호를 풀면 360-360*(n-2)/n 이 된다. 여기서 제 1항의 상수 360도는 필요없는 값이다. 제자리에서 360도를 돌면 역시 제자리이니까. 그러면 상수항 360은 제거가 되고 남은 항은 -360*(n-2)/n 인데 이를 풀어보면 (720/n) - 360 인데 여기서도 마찬가지로 360은 의미없는 값이 되어 결국 이런 복잡한 수식의 값은 720/n인 셈이다.

lt후의 식은 180-180*(:n-2)/:n 인데 이도 간략화가 가능하다. 우선 식을 풀면, 180 - (180n-360)/n 이 되고 이는 180-180 + 360/n, 즉 360/n 이 된다. 간략화한 식을 적용한 코드는 다음과 같다.

to myjung :l :n
    repeat :n [fd :l rt 720/:n fd :l lt 360/:n]
end

코드가 훨씬 깔끔하고 명료해졌다. ㅋㅋ