以前在学校里学过图形学,但没用过功,效果很不好。 现在决定重新重新来过,不断督促自己复习这方面的内容。 首先从直线的生成开始。 算法一, // 直线的DDA(数值微分)算法 // 直线起始点(xa, ya) // 直线终止点(xa, ya) void lineDDA(int xa, int ya, int xb, int yb, HDC hDC, COLORREF crColor) { int dx = xb - xa, dy = yb - ya; int steps; int loop; float xIncrement, yIncrement; float x = (float)xa, y = (float)ya; if (abs(dx) > abs(dy)) steps = abs(dx); else steps = abs(dy); xIncrement = dx / (float)steps; yIncrement = dy / (float)steps; SetPixel(hDC, xa, ya, crColor); // 初始点 x += 0.5; // 因四舍五入而添加的 y += 0.5; // 先行相加就保存在浮点值x、y里了 for (loop = 0; loop < steps; loop++) { x += xIncrement; y += yIncrement; SetPixel(hDC, (int)x, (int)y, crColor); } } 算法二, // 直线