作业题:
请参考课本教材和查阅图形学书籍资料。 1.
1)给定直线的起点坐标为P0(x0,y0)、终点坐标为P1(x1,y1),容易计算出直线斜率k。假设0≤k≤1,则x方向为主位移方向,绘制直线的递推公式为:
,这称为数值微分法(Digital Differential Analyzer,DDA),请编程实现之。提示:DDA算法实质上是对直线斜率进行了四舍五入计算。 2)圆的扫描转换和椭圆的扫描转换的编程实现。 2.
用鼠标在屏幕上绘制任意顶点数的封闭多边形并填充,填充效果如下图所示。编程要求:⑴多边形的顶点数不受限制;
⑵按下鼠标左键,拖动鼠标绘制多边形,同时按下Shift键可以绘制水平边或垂直边; ⑶单击鼠标右键闭合多边形; ⑷使用边缘填充算法填充多边形。
3
请按照图所示,使用对话框输入直线的起点和终点坐标。在窗口左侧区域绘制输入直线和“窗口”,在窗口右边右侧区域绘制“视区”并输出裁剪结果。这里需要用到窗视变换的公式。请分别用Cohen-Sutherland算法、中点分割裁剪算法和梁友栋-Barsky算法实现。
4
在屏幕上使用鼠标绘制控制多边形,根据控制多边形的阶次绘制Bezier曲线和B样条曲线。
5.
1) 使用VC编程实现,以直角三角形为基础绘制下图所示Sierpinski三角形。
2)以屏幕范围为基础绘制下图所示Sierpinski地毯。