收藏 分享(赏)

直线扫描转换.doc

上传人:精品资料 文档编号:10009545 上传时间:2019-09-27 格式:DOC 页数:6 大小:51.50KB
下载 相关 举报
直线扫描转换.doc_第1页
第1页 / 共6页
直线扫描转换.doc_第2页
第2页 / 共6页
直线扫描转换.doc_第3页
第3页 / 共6页
直线扫描转换.doc_第4页
第4页 / 共6页
直线扫描转换.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、1 实验目的1)掌握直线段的中点 Bresenham 扫描转换算法;2)掌握直线绘制类的设计实现;3)掌握菱形图案的生成方法。2 实验要求1)直线绘制通过设计类似 MFC 的直线绘制类来实现,有类似的MoveTo()函数设置直线段起点,LineTo()函数设置直线段终点并完成绘制,还要有直线段颜色设置函数;2)直线的绘制采用中点 Bresenham 扫描转换算法实现,根据直线斜率 k 的范围区分五种不同的情况处理;3)调用设计实现的直线绘制类,在视图区绘制菱形线框,并要求各边颜色不同。3 详细设计3.1 核心算法及类型设计使用中点 Bresenham 扫描算法完成绘制:CP2:CP2()x=0

2、.0;y=0.0;CP2:CP2()CP2:CP2(double x,double y)this-x=x;this-y=y;CLine:CLine() /构造函数CLine:CLine() /析构函数void CLine:SetLineColor(COLORREF color)clr=color;void CLine:MoveTo(CP2 p0)P0=p0;void CLine:MoveTo(double x,double y)P0.x=x;P0.y=y;void CLine:LineTo(double x,double y,CDC*pDC)CP2 p;p.x=x;p.y=y;LineTo(p

3、,pDC);void CLine:LineTo(CP2 p1,CDC*pDC)P1=p1;CP2 p, t;if(fabs(P0.x-P1.x)P1.y)t=P0; P0=P1; P1=t;for(p=P0;p.ySetPixelV (Round(p.x),Round(p.y),clr);elsedouble k,d;k=(P1.y-P0.y)/(P1.x-P0.x);if(k1.0)if(P0.yP1.y)t=P0; P0=P1; P1=t;d=1-0.5*k;for(p=P0;p.ySetPixelV(Round(p.x),Round(p.y),clr);if(d=0)p.x+;d+=1-

4、k;elsed+=1;if(0.0P1.x)t=P0; P0=P1; P1=t;d=0.5-k;for(p=P0; p.xSetPixelV(Round(p.x),Round(p.y),clr);if(d=-1.0 P0=P1;P1=t;d=-0.5-k;for(p=P0; p.xSetPixelV(Round(p.x),Round(p.y),clr);if(d0)p.y-;d-=1+k;elsed-=k;if(kP1.y;p.y-)pDC-SetPixelV(Round(p.x),Round(p.y),clr);if(dSetMapMode(MM_ANISOTROPIC);pDC-SetWi

5、ndowExt(rect.Width(),rect.Height();pDC-SetViewportExt(rect.Width(),-rect.Height();pDC-SetViewportOrg(rect.Width()/2,rect.Height()/2);rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);CLine*line= new CLine;/绘制坐标轴line-SetLineColor(RGB(0,0,0);/黑色line-MoveTo(CP2(-rect.Width()/2,0);/x轴line-LineTo(CP2(rec

6、t.Width()/2,0),pDC);line-MoveTo(CP2(0,-rect.Height()/2);/y轴line-LineTo(CP2(0,rect.Height()/2),pDC);/绘制直线int a=200;CP2 A (0,a);CP2 B (a,0);CP2 C (0,-a);CP2 D (-a,0);/绘制AB边line-SetLineColor(RGB(255,0,0);/红色line-MoveTo(A);line-LineTo(B,pDC);/绘制BC边line-SetLineColor(RGB(0,255,0);/绿色line-LineTo(C,pDC);/绘制

7、CD边line-SetLineColor(RGB(0,0,255);/蓝色line-LineTo(D,pDC);/绘制DA边line-SetLineColor(RGB(255,255,0);/黄色line-LineTo(A,pDC);delete line;3.2 程序设计实现及流程图使用 Bresenham 扫描转换算法进行直线绘制,需要根据斜率 k 值分别选择不同的误差项和初始值,除垂线外,可分为 k1 四种情况。垂线可以直接画出,-11 时,y 轴为主移动方向。在写直线绘制类时,首先定义二维坐标类“CP2” ,用于存储和传递二维坐标参数。直线类中主要包括存放起点、终点和绘制颜色的成员变量

8、,以及SetLineColor()函数设置线段颜色,输入参数为0,1之间的颜色值;MoveTo()函数设置直线段的起点,输入参数是二维坐标;LineTo()函数设置直线段终点并完成绘制,输入参数是二维坐标和绘制用 CD。成员函数SetLineColor()的实现只需传入颜色记录到成员变量 clr;成员函数MoveTo()实现,只需将传入参数记录到成员变量 P1。最后在 CLineDraw()函数中四次调用 Cline 类对象,分别绘制四条边。每条边只需设置两个定点及颜色即可。4 典型测试结果5 实验问题总结直线扫描转换主要是设置直线起点坐标,终点坐标,直线斜率及直线颜色。直线段起点坐标用 MoveTo()函数来实现,输入的参数是二维坐标;LineTo()函数设置直线段终点坐标并完成绘制,输入的参数是二维坐标及绘制用的 CD;SetLineColor()函数设置直线段的颜色。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报