아이디어 : 원의 대칭성 활용하여 각도가 0°~45°일 때만 그리고, 나머지 부분은 대칭이동하여 그린다.
![](https://velog.velcdn.com/images/tedxpem/post/91ecfc94-c768-463e-88d2-fd2ab75254f3/image.jpg)
반지름이 12인 원을 그린다고 가정하자.
![](https://velog.velcdn.com/images/tedxpem/post/02ab4602-ccb8-4b5c-82d8-30fbb24e4c56/image.gif)
8분원을 그릴 때, 다음 두 조건을 만족한다.
- y값은 항상 1씩 증가하는 한다
- x값은 같거나 1 감소한다
![](https://velog.velcdn.com/images/tedxpem/post/05faab4a-62bd-4593-a7e4-919e026b7a1e/image.png)
![](https://velog.velcdn.com/images/tedxpem/post/8c8a8c50-b95e-4462-8344-8953e7bfb2d9/image.png)
x가 1감소할 때 다음 포인트인 Pk+1는 다음 2개 중 하나이어야 한다.
![](https://velog.velcdn.com/images/tedxpem/post/3421a589-e58a-47f7-9080-a188a3373923/image.png)
Midpoint algorithm은 중심 위치에서 가까운 점을 선택하여 그리게 된다.
- midpoint가 원 안에 있는 경우
x(next)=x(current)
- midpoint가 원 밖에 있는 경우
x(next)=x(current)−1
![](https://velog.velcdn.com/images/tedxpem/post/5ba9107b-9d42-4d24-ba92-b3fe36c07ff9/image.png)
midpoint가 원 내부 혹은 외부에 있는지 판단하는 방법
원점부터 midpoint까지의 거리와 반지름을 비교함으로써 판단할 수 있다.
![](https://velog.velcdn.com/images/tedxpem/post/c2615e1c-495e-435f-aa74-693d5c6d3720/image.png)
Pk가 의미하는 것은 부호를 통해, k번째 x에서 midpoint가 원 내부에 위치하는지 외부에 위치하는지에 대한 정보만 가지고 있다.
![](https://velog.velcdn.com/images/tedxpem/post/8505ffd3-a49a-4d7e-a01c-c11523e28385/image.png)
Pk+1 유도 과정
2가지 알고 있는 사실을 통해 Pk+1 을 유도할 수 있다.
Yk+1=yk+1Xk+1=XkorXk−1
![](https://velog.velcdn.com/images/tedxpem/post/dd5b4774-3402-4821-ad38-e286038ba4a9/image.png)
결론
Pk+1은 다음과 같은 식을 통해 구할 수 있다.
Pk를 알고 있다면, Pk+1를 구할 수 있고, Pk+1의 부호에 따라서 다음 point를 결정할 수 있다.
이제 우리는 8분원을 그리기위한 모든 정보를 찾았다.
8분원을 모두 그릴 때까지 point를 구하고, 8분원을 모두 그린 경우 대칭이동을 통해 원의 나머지 부분을 그릴 수 있다.
![](https://velog.velcdn.com/images/tedxpem/post/5cf5ba1c-b4fe-48a3-a3d5-a9a351fb0302/image.png)
참고
midpoint circle drawing site
midpoint circle drawing youtube