目录
1 综述 1
2 算法介绍 2
2.1 绘制线段 2
2.1.1 DDA算法 2
2.1.2 Bresenham算法 2
2.1.3 代码处理 2
2.2 绘制多边形 3
2.3 绘制椭圆 3
2.4 绘制曲线 3
2.4.1 Bezier曲线 3
2.4.2 B-spline曲线 3
2.4.3 代码处理 3
2.5 平移 4
2.6 旋转 4
2.7 缩放 4
2.8 裁剪 4
2.8.1 Cohen-Sutherland算 4
2.8.2 Liang-Barskey算法法 4
3 系统介绍 5
3.1 CLI框架 5
3.2 GUI框架 5
3.3 GUI功能 6
3.4 额外功能 9
3.4.1 界面美化 9
3.4.2 菜单部分 9
3.4.3 绘图工具栏 10
3.4.4 编辑工具栏 10
4 总结 10
4.1 遇到的一些问题 10
4.2 6月更新 10
4.2.1 添加功能 10
4.2.2 bug修正及其他更新 11
参考文献 11
1综述
在老师所给框架代码上进行修改完善,完成了所有要求的指令输入输出,GUI界面实现了CLI部分的所有功能,包括设置画笔颜色、重置画布、保存画布、两种算法绘制线段、两种算法绘制多边形、绘制椭圆、两种算法绘制曲线、平移、旋转、缩放和两种算法裁剪线段.
额外实现了如下内容:
•点击画布右、下、右下角边框调整画布大小; 点击画布选择图元; 编辑时显示平移等操
作控制点.
•删除选中图元,复制选中图元,粘贴已复制图元.
•绘制虚线段; 凸多边形和椭圆填充.
•更美观的界面.
2算法介绍
2.1绘制线段
2.1.1DDA算法
基本思想是记下起点,然后让长的一边变量不断加一,短的一边则不断加斜率乘1后近似
为int值.代码参照[7].
2.1.2Bresenham算法
基本思想其实和DDA是一样的.只是Bresenham算法通过变形避免了浮点运算.这样一
来,既提高了运算的效率,又避免了浮点数不断累加造成的长线段误差.所以本质上,Bresenham是DDA算
法的优化形式.代码参照[7].
2.1.3代码处理
•特判使得能够处理两端点相等的情况.
•因为讲义中说不要求像素级一致,所以和伪代码一样只亮一边端点,即线段点的范围[P0, P1).
2.2绘制多边形
默认指令中的点是排好序的, 直接调用线段绘制算法按顺序连点.
2.3绘制椭圆
使用ppt上的中点椭圆算法, 先画出1/4椭圆, 然后对称. 画1/4椭圆时,根据是否到达切线斜率为-1的位置, 来判断选点的方向是基于x还是基于y, 再根据实际椭圆上的点离哪个点更近取近似.
实际代码要先求出中心和长短轴, 然后以中心为原点求点, 再映射回原来的坐标系.
对称的时候考虑了x轴和y轴上的特例, 不然x=0和y=0的点对称后相当于1个点出现了两次.
代码流程参考书上ppt相关部分.