【发布时间】:2021-08-31 14:55:23
【问题描述】:
我正在寻找用 Bresenham 的直线算法制作弧线的方法。这个算法画出完美的圆,但是如果我需要画弧(从 0 到 Pi)并将它旋转 30 度(例如)怎么办?
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;
}
}
【问题讨论】:
-
多年前,我根据 Bresenham 文档实现了几个弧形算法,为 Allegro 游戏库做出了贡献(当我联系他以获取更多信息时,我还亲自收到了他的一封私人信件!) .你可以在这里找到完整的来源:liballeg.org
标签: c++ geometry geometric-arc bresenham