实验一 线和圆的绘制
专业班级 实验学时 实验时间 2 学 号 实验类型 指导老师 验证性 姓 名 实验地点 实验成绩 年 月 日 一、实验目的: 1.掌握Bresenham画线和画圆算法。 2.掌握将图形学算法改写成程序的方法。
二、实验内容:
1.利用Bresenham画线算法画线,要求起点和终点由用户确定; 2.利用Bresenham画圆算法画圆,要求圆心和半径由用户确定。
三、实验要求:
1.完成程序的编写与验证;
2.写出实验报告,报告中只体现OnDraw中自己完成的部分,要求对程序结构做出详细的解释。
四、编程提示:
1. 在Visual C++中首先建立一个单文档MFC AppWizard工程,绘图功能在View类的OnDraw()函
数中实现;
2.教材算法中的drawpixel(x,y,color)函数在OnDraw函数中对应pDC->SetPixel(POINT,COLOR); 3.Bresenham画圆算法是基于用户坐标系(二维笛卡尔坐标系),而在屏幕上显示的象素坐标是基于设备坐标系。如图1.1,设用户坐标系的原点O对应于设备坐标系的(xc,yc)。则x1=xc+x,y1=yc-y。
图1.1 用户坐标系与设备坐标系
4.Bresenham画圆算法只画出了位于第一象限的4个分圆,要画出整个圆,必须对第一象限的点作对称变换。
五、实验步骤与结果:(由学生按照实验内容完成)
1
六、总结
2
实验二 图形裁剪
专业班级 实验学时 实验时间 2 学 号 实验类型 指导老师 验证性 姓 名 实验地点 实验成绩 年 月 日 一、实验目的: 1.掌握Sutherland直线段裁减算法。 2.掌握屏幕区域编码方法。
二、实验内容:
生成并显示窗口,要求程序中定义窗口左上和右下点的坐标值。绘制裁剪后的直线段,要求程序中定义直线段的端点坐标。
三、实验要求:
1.为View类添加相应的成员函数;
2.用不同的颜色绘制出窗口和裁剪后的直线段; 3.写出实验报告。
四、编程提示:
1. 可使用pDC的MoveTo和LineTo函数绘制窗口和裁剪后的直线段,例如绘制(x0,y0)至(x1,y1)的直线段:
POINT pix; pix.x=x0; pix.y=y0;
pDC->MoveTo(pix); pix.x=x1; pix.y=y1;
pDC->LineTo(pix);
2.修改绘制线条颜色可参考以下代码:
CPen pen(PS_SOLID,1,RGB(255,0,0));//画笔改为红色
CPen *pOldpen=pDC->SelectObject(&pen);//设置画笔并保存原画笔 POINT pix; pix.x=50; pix.y=50;
pDC->MoveTo(pix); pix.x=400; pix.y=300;
pDC->LineTo(pix);
pDC->SelectObject(pOldpen);//恢复原画笔
五、实验步骤与结果:(由学生按照实验内容完成)
3