void COpenGLView::MidPoint(int x1, int y1, int x2, int y2)
{
//先考虑斜率不存在的情况
if (x1 == x2) {
if (y1 <= y2) {
for (int y = y1; y <= y2; y++) {
glBegin(GL_POINTS);
glVertex2i(x1, y);
glEnd();
}
}
else {
for (int y = y1; y >= y2; y--) {
glBegin(GL_POINTS);
glVertex2i(x1, y);
glEnd();
}
}
}
else
{
//为了便于思考分类,将右边的点设为(xEnd,yEnd)
int x, y, xEnd, yEnd;
if (x1 < x2) {
x = x1; xEnd = x2; y = y1; yEnd = y2;
}
else {
x = x2; xEnd = x1; y = y2; yEnd = y1;
}
int a = y - yEnd, b = xEnd - x;
if (yEnd >= y && (yEnd-y) <= (xEnd-x)) { //这里判断斜率是不是>=0且<=1,后面的一样
int d = a + a + b;
while (x<=xEnd)
{
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
if (d >= 0) {
x++;
d = d + a + a;
}
else {
x++;
y++;
d = d + a + a + b + b;
}
}
}
else if(yEnd < y && (y - yEnd) <= (xEnd - x))
{
int d = a + a - b;
while (x <= xEnd)
{
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
if (d >= 0) {
x++;
y--;
d = d + a + a - b - b;
}
else {
x++;
d = d + a + a;
}
}
}
else if (yEnd >= y && (yEnd - y) > (xEnd - x))
{
int d = a + b + b;
while (y <= yEnd)
{
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
if (d >= 0) {
x++;
y++;
d = d + a + a + b + b;
}
else {
y++;
d = d + b + b;
}
}
}
else if (yEnd < y && (y - yEnd) > (xEnd - x))
{
int d = a - b - b;
while (y >= yEnd)
{
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
if (d >= 0) {
y--;
d = d - b - b;
}
else {
y--;
x++;
d = d - b - b + a + a;
}
}
}
}
}
老师的课件: