前言
我们老师竟然还在用MFC,一开始我是震惊的,后来参考了很多国内的教材发现都是MFC。。(QB对不起!
该图形学系列博客的环境是VC++6.0 & MFC & OpenGL,Mac上装一个Windows XP虚拟机,适应一段时间后发现还是挺舒服的,也找到了童年的感觉。
代码地址:我的Github
API介绍
类名::draw(CPoint from, CPoint to, CDC* dc)
其中CDC* dc是一个设备上下文对象,通过调用它的
void CDC::SetPixel(int x, int y, COLORREF color);
void CDC::SetPixel(CPoint point, COLORREF color);
方法来画像素点
DDA
将直线按照长轴方向微分, 比如这条直线是 (0, 0) -> (5, 4), 那么一共画5个点, 分别是(0, 0), (1, 0.8), (2, 1,6), (3, 2.4), (4, 3.2), (5, 4). 因为像素空间的坐标值只能是整数, 所以在绘制时要四舍五入.
代码
void DDALine::draw(CPoint from, CPoint to, CDC* dc) {
float x = from.x + 0.5;
float y = from.y + 0.5;
float stepx, stepy;
int times = 1;
COLORREF color = RGB(255, 0, 0);
int dy = to.y - from.y;
int dx = to.x - from.x;
if (abs(dy) >= abs(dx)) {
times += abs(dy);
stepx = dx * 1.f / dy;
stepy = 1.f;
if (from.y > to.y) {
stepx *= -1;
stepy *= -1;
}
} else {
times += abs(dx);
stepx = 1.f;
stepy = dy * 1.f / dx;
if (from.x > to.x) {
stepx *