Bresenham의 선 알고리즘을 사용하여 호를 만드는 방법을 찾고 있습니다. 이 알고리즘은 완전한 원을 그리지 만, 원호를 그려야하고 (예 : 0도에서 Pi까지) 30도 회전해야합니까?C++ Bresenham의 선 알고리즘이 호를 그리며 회전 함
void DrawCircle(HDC hdc,int x0, int y0, int radius)
{
int x = 0;
int y = radius;
int delta = 2 - 2 * radius;
int error = 0;
while(y >= 0) {
//SetPixel(hdc,x0 + x, y0 + y,pencol);
SetPixel(hdc,x0 + x, y0 - y,pencol);
//SetPixel(hdc,x0 - x, y0 + y,pencol);
SetPixel(hdc,x0 - x, y0 - y,pencol);
error = 2 * (delta + y) - 1;
if(delta < 0 && error <= 0) {
++x;
delta += 2 * x + 1;
continue;
}
error = 2 * (delta - x) - 1;
if(delta > 0 && error > 0) {
--y;
delta += 1 - 2 * y;
continue;
}
++x;
delta += 2 * (x - y);
--y;
}
}
감사합니다. 방정식을 변경해야한다고 생각했지만 버전이 작동하지 않았습니다. 예를 들어 주시겠습니까? 그리고 그것은 Michael Abrash의 Black Book에서 나온 것이 아닙니다. – PePe
아아, 검은 책에 포함되지 않은 장의 그래픽 프로그래밍 서적에서 유래되었습니다. 나는 독서를 기억하고 그것이 편집 판에있을 것이라고 생각했다. 지금 그물에 주위를 파고 ... –
고마워,하지만 나는 Bresenham의 알고리즘을 사용하는 것을 선호. – PePe