WPF의 Polygon 클래스를 사용하여 정다각형을 그리는 작업을 하던 중
이상하게 정다각형의 모습이 내가 원하던 모습과 미묘하게 다른 현상을 보았다.
나는 정다각형을 그리기 위해
각도를 0도부터 [ 360 / (정다각형의 면의 수) ] 씩 증가시키는 방식을 사용하였다.
예를 들어 정오각형의 경우,
"Polygon의 중심점을 지나는 수직선" 과
"Polygon의 중심점과 Polygon의 첫 점을 지나는 직선" 간의
각도가 0도이다.
Polygon의 두번째 점의 경우 각도가 360 / 5 = 72 도 이고
세번째 점의 경우 144도,
네번째 점의 경우 216도,
다섯번째 점의 경우 288도 이다.
이렇게 각도를 직접 계산할 경우 반드시 주의해야 할 점이 있다. (내가 했던 실수이기도 하다)
바로 데이터 타입을 정확히 맞춰 주어야 한다는 것이다.
나는 Polygon을 그릴 때 계산된 각도 값을 decimal 형 변수에 저장하였다.
하지만 외부로부터 데이터를 얻어온 각도 값을 저장할 때에는 int 형 변수에 저장하였다.
정삼각형 ~ 정육각형 까지는 각도값이 정수값으로 딱 떨어지지만
정칠각형의 경우 각도값이 소수점으로 변한다.
이로 인해 decimal형 변수와 int형 변수 간의 오차가 생기게 되고,
정다각형을 그리면 그릴 수록 오차가 쌓이게 된다.
평소 대학생이나 할 법한 실수라고 생각해왔던 나를 돌아보게 되는 시간이었다.
이런 거 하나 하나에 대해 좀 더 민감해지고 감을 기를 수 있도록 노력해야겠다.