计算机图形学 第2版 课件5-字符的生成_第1页
计算机图形学 第2版 课件5-字符的生成_第2页
计算机图形学 第2版 课件5-字符的生成_第3页
计算机图形学 第2版 课件5-字符的生成_第4页
计算机图形学 第2版 课件5-字符的生成_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

字符的绘制内容大纲1字符简介2点阵字符3矢量字符字符点阵字符:用矩形点阵表示字符形状矢量字符:用笔画信息表示字符形状1字符简介245rtedHJHGD网络!@#%^+<>(1)点阵字符的存储111111

000

11

00

11

00

11

00

01

10

11000

110

11

000

11011

00

11

0111111

0000000000FC6663636366FC00一个二进制位表示一个点十六进制8×8点阵字符882521029999991022520十进制2点阵字符00011000001111000

11

0011

00

11001

1

00

11

11

11

00

11

00

11

0011001

1

000000000

24601021021261021020十进制000

1111

00

0

10

00010

11

000000

11000000

11

00000001

10001000

111

1

000000000303396969633300十进制(1)点阵字符的存储2点阵字符(2)点阵字符的显示111111

000

11

0011

00

11

000

110

11000110

11

0001

10

11

00

11

0111111

0000000000BYTEm[8]={252,102,99,99,99,99,102,252,0};2726252423222120if((m[4]&pow(2,5))==pow(2,5))x=2,y=4if((m[y]&pow(2,7-x))==pow(2,7-x))x=01234567y=012345672点阵字符主要代码:BYTEm[8]={252,102,99,99,99,102,252,0};for(inty=0;y<8;y++)for(intx=0;x<8;x++)if((m[y]&(BYTE)pow(2,7-x))==(BYTE)pow(2,7-x))pDC->SetPixel(x+x0,y+y0,color);111111

000

11

0011

00

11

000

110

11000110

11

000

110

11

00

11

0111111

00000000002726252423222120x=01234567y=012345672点阵字符(2)点阵字符的显示【问题1】如何显示用户指定点阵字符?16×16点阵字符0111111111110

00001111111111110000

01110

00

001

111000

01110

000001

11100

01

110

000001

1110001

11

00

00001

11100

01110

000001

1110001110000001

1110001110000001

1110001110000001

1110001110000001

1110001110000001

1110001110000001

111000111000001

11100011111111111110000111111111100002点阵字符(2)点阵字符的显示shortm[16]={……};for(inty=0;y<16;y++)for(intx=0;x<16;x++)if((m[y]&(BYTE)pow(2,15-x))==(BYTE)pow(2,15-x))pDC->SetPixel(x+x0,y+y0,color);2点阵字符【应用案例】简易时钟的绘制(1)设计数字点阵(2)简易时钟表盘设计(3)时钟指针移动模拟:时钟函数OnTimer移动秒针

3矢量字符(1)矢量字符的存储从原点开始,移到a(10,10)建立局部坐标系画线到b(10,110)结束画线到c(60,110)画曲线到d(60,60)[中间点为(80,85)]画曲线到e(60,10)[中间为(80,35)]画直线到a(10,10)移到f(10,60)画线到d(60,60)3矢量字符(1)矢量字符的存储不易设置合适的端点坐标问题:记录笔画的方向及长度解决:3矢量字符(1)矢量字符的存储如何存储字符笔画的方向及长度?方向编码0、1、2方向的x值相同

2、3、4方向的y值相同

1方向的y值是x值的一半3方向的x值是y值的一半2方向的x值与y值相同xyxy0123456789ABCDEF3矢量字符(1)矢量字符的存储A1,3D,33,1B,28,01表示落笔,

2表示抬笔,0表示结束长度+方向xy0123456789ABCDEF1,3D,33,2,29,1,20,01,3D,33,2,39,1,20,01,3D,33,2,2A,1,10,03矢量字符(1)矢量字符的存储【例】“北”字的编码:24,49,41,44,38,30,44,2,20,1,5C,31,39,5C,40,24,01,1表示落笔2表示抬笔0表示结束长度+方向3矢量字符C语言的16进制表示:0x5C24,49,41,44,38,30,44,2,20,1,5C,31,39,5C,40,24,01,BYTEbh[20]={1,0x24,0x49,0x41,……};(1)矢量字符的存储3矢量字符(2)矢量字符的显示BYTEbh[20]={1,0x24,0x49,0x41,……};获取笔画方向、笔画长度XXXXXXXX长度方向00001111(15)

0000XXXXXXXXXXXXd=bh[i]&15;lens=bh[i]>>4;3矢量字符(2)矢量字符的显示i=0;while(bh[i]!=0)//确定是否该字符结束{if(bh[i]==1||bh[i]==2)bz=bh[i];//如果是抬笔落笔标志,保存else{d=bh[i]&15;lens=bh[i]>>4;//获取笔画方向和长度switch(d)//不同方向坐标变化不同{case0:x=x+lens;break;//0方向case1:x=x+lens;y=y+lens/2;break;//1方向case2:x=x+lens;y=y+lens;break;//2方向case3:x=x+lens/2;y=y+lens;break;//3方向……}if(bz==2)pDC->MoveTo(x,y);//2抬笔,只移动不画elsepDC->LineTo(x,y);//1落笔,画线}i++;}关键程序代码3矢量字符(3)矢量字符的缩放i=0;while(bh[i]!=0){if(bh[i]==1||bh[i]==2)bz=bh[i];else{d=bh[i]&15;lens=bh[i]>>4;switch(d){case0:x=x+

lens;break;case1:x=x+

lens;y=y+

lens/2;break;case2:x=x+

lens;y=y+

lens;break;

case3:x=x+

lens/2;y=y+

lens;break;……

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论