我正在尋找使用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的黑皮書。 – PePe
唉,它是來自圖書編程書籍中未包含在黑皮書中的章節。我記得閱讀並認爲它將在編譯版本中。現在在網上搜索... –
謝謝,但我更喜歡使用Bresenham的算法。 – PePe