计算机图形学实验(一)—— 直线DDA算法的实现(VC++和easyx没有用MFC)

1. DDA算法(数值微分法)原理:

    1)网上或者计算机图形学书本上有详细介绍。

    2)最核心的是选定(x2-x1)和(y2-y1)中较大者为步进方向。

2. 实现工具:
    1) VS2017(C++)

    2) 下载插件:Easyx 。使用方法和下载见官网: https://www.easyx.cn/

3. 源码展示:

#include
#include
#include
#include
using namespace std;
void DDA(int x1, int y1, int x2, int y2) {
	int i, steps, dx, dy;
	int x0 = 400, y0 = 300;
	float x, y, delta_x, delta_y;
	dx = x2 - x1;
	dy = y2 - y1;
	if (abs(dx) >= abs(dy))
		steps = abs(dx);
	else
		steps = abs(dy);
	delta_x = float(1.0*dx / steps);                        //让结果为浮点数
	delta_y = float(1.0*dy / steps);
	x = x1;
	y = y1;
	putpixel((x + x0), (y0 - y), RED);                      //画第一个点
	//cout << "("<> x1 >> y1 >> x2 >> y2;
        initgraph(x0*2,y0*2);		        //初始化图形窗口大小
	line(0,y0,x0*2,y0);			//坐标轴X
	line(x0,0,x0,y0*2);			//坐标轴Y
        DDA(x1,y1,x2,y2);                       //DDA画线算法
	_getch();                               //等待一个任意输入结束
	closegraph();                           //关闭图形窗口
	return 0;
}

4. 结果展示:

    1)输出点坐标验证DDA算法:键盘输入13 20 -10 5(把相关图形窗口的代码注释掉然后加上输出点的代码即可)

         上课时老师给的DDA练习:

计算机图形学实验(一)—— 直线DDA算法的实现(VC++和easyx没有用MFC)_第1张图片

程序输出截图:

计算机图形学实验(一)—— 直线DDA算法的实现(VC++和easyx没有用MFC)_第2张图片

    2)图形化展示:(键盘输入0 0 400 300)

计算机图形学实验(一)—— 直线DDA算法的实现(VC++和easyx没有用MFC)_第3张图片

5. 个人感悟:

    1)DDA算法上课的时候理解了,写程序还是会有很多不容易发现的错误例如小数与整数之间转换,困扰了很久。

    2)刚开始下载VS的时候,运行hello world需要一分钟,系统显示一直在加载各种各样的符号。

          解决办法:VS菜单栏 工具>选项> 调试>符号>取消Microsoft符号服务器

    3)画图环境弄了一晚上,水平太菜,DDA算法又是一晚上,效率不行。

    4)第一次写博客,代码和排版有限,请大家多多指教。

你可能感兴趣的:(计算机图形学)