您的位置:首页 > 其它

Bresenham中点画圆法与二阶差分算法

2016-06-20 15:45 337 查看


void Bresenham(int radius, int r,COLORREF color, CDC* pDC)
{
int x = 0;
int y = radius;
int m = d - radius;
CirclePoints(x, -y, r, color, pDC);
CirclePoints(y, -x, r, color, pDC);
CirclePoints(x, y, r, color, pDC);
CirclePoints(-y, -x, r, color, pDC);
while (y > x) {
if (m < 0) { /* Select E */
m = 2 * x + 3 * d + m;
}
else { /* Select SE */
m = 2 * (x-y) + 5 * d + m;
y = y - d;
}
x = x + d;
CirclePoints(x, -y, r, color, pDC);
CirclePoints(y, -x, r, color, pDC);
CirclePoints(x, y, r, color, pDC);
CirclePoints(y, x, r, color, pDC);
CirclePoints(-x, -y, r, color, pDC);
CirclePoints(-y, -x, r, color, pDC);
CirclePoints(-y, x, r, color, pDC);
CirclePoints(-x, y, r, color, pDC);
}
}




void dSE(int radius, int r, COLORREF color, CDC* pDC)
{
int x = 0;
int y = radius;
int m = d - radius;
int dE = 3*d;
int dSE = -2 * radius + 5*d;
CirclePoints(x, -y, r, color, pDC);
CirclePoints(y, -x, r, color, pDC);
CirclePoints(x, y, r, color, pDC);
CirclePoints(-y, -x, r, color, pDC);
while (y > x) {
if (m < 0) { /* Select E */
m = dE + m;
dE = dE + 2 * d;
dSE = dSE + 2 * d;
}
else { /* Select SE */
m = dSE + m;
dE = dE + 2 * d;
dSE = dSE + 4 * d;
y = y - d;
}
x = x + d;
CirclePoints(x, -y, r , color, pDC);
CirclePoints(y, -x, r, color, pDC);
CirclePoints(x, y, r, color, pDC);
CirclePoints(y, x, r, color, pDC);
CirclePoints(-x, -y, r, color, pDC);
CirclePoints(-y, -x, r, color, pDC);
CirclePoints(-y, x, r, color, pDC);
CirclePoints(-x, y, r, color, pDC);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: