文档介绍:《计算机图形学》
实验报告
学号:0908610211
姓名:宋雪英
班级:计算机0961
项目:
,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。
、线性两种画刷来绘制圆和椭圆。
,旋转和对称变换
2012年 12月25日
基本图形的生成技术
一、实验目的
在一个图形系统中,基本图形(也称为图元、图素等)的生成技术是最基本的,任何复杂的图形都是由基本图形组成的,基本图形生成的质量直接影响该图形系统绘图的质量。所以,需要设计出精确的基本图形生成算法,以确保图形系统绘图的精确性。本次实验的目的就是利用Bresenham算法和中心画线法两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。利用方形、线性两种画刷来绘制圆和椭圆。实现交互式二维图形的放缩,旋转和对称变换。
实验任务
,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。
、线性两种画刷来绘制圆和椭圆。
,旋转和对称变换。
三、画直线的实验内容
任务一:利用其它两种画直线方法实现放大10陪显示方法交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。
1、设计思路
第一步:建立DDAMouseLine工程文件;
第二步:向视图类中添加自定义的成员变量
用鼠标右键单击视图类,选择“Add Member Variable…”,添加下面三个成员变量。
proctected :
CPoint m_p1; //起点
CPoint m_p2; //起点
CPoint m_p; //点击鼠标时点的取值
第三步:向视图类中添加自定义的成员函数原型:
public:
Void DDAMouseLine(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color);
Line()函数以当前位置所在的点为直线的起点,另指定一个点为直线的终点,画出一段直线。
第四步:在视图类CPP文件的构造函数中初始化成员变量。
视图类的构造函数名与该视图类的名字相同。在视图类中选择构造函数,如:CDDAMouseLineView(),并赋值:
=100; =100; //起点
=100;=100;
=600; =400; //终点
第五步:在视图类的OnDraw()函数中加入下列代码,画出网格,实现视图绘图。
//画网格
int gi,gj;
//画横线
pDC->TextOut(90,90,"(100,100)");
pDC->MoveTo(100,100);
for(gj=100;gj<=400;gj=gj+10)
{
pDC->MoveTo(100,gj);
pDC->o(600,gj);
}
//画竖线
pDC->MoveTo(100,100);
for (gi=100;gi<=600;gi=gi+10)
{
pDC->MoveTo(gi,100);
pDC->o(gi,400);
}
pDC->TextOut(590,410,"(600,400)");
pDC->SelectStockObject(NULL_BRUSH);
第六步:向视图类中添加鼠标OnLButtonDown()函数消息响应函数
OnLButtonDown(UINT nFlags, CPoint point);
在鼠标处理函数中,point参数代表鼠标热点处的坐标位置,,。默认坐标原点(0,0)位于窗口的左上角。由于应用程序要求自动捕获鼠标事件,因此应当采用Windows事件处理函数,而不是成员函数。
if (<= && <= )
{
pDC->SetPixel(,,RGB(255,0,0));
pDC->Ellipse(-5,-5,+5,+5);
}
=+10;
=*+40;
=(int)((+5)/10)*10;
//将从(100,100)以10