第一章 撰写绘图程式 1
1.1成功地撰写绘图程式之原则 2
1.1.1坚持 2
1.1.2将程式结构化 2
1.1.3分离且逐项克服 3
1.2由上而下的原理 4
1.2.1问题的描述 4
1.2.2知道您期望达到的目标 5
1.3有关由上而下程式设计的错误观念 6
1.3.1开始到结束的导向 6
1.3.2总是由上而下 6
1.4绘图程式撰写的秘诀 7
1.4.1留心两种算术界 7
1.4.2直接处理记忆体 8
1.4.3利用组译器将您的C程式码最佳化 9
1.4.4小心地考虑相容性 10
1.4.5将程式视为命令 10
1.4.6保持程式的简单性 11
1.4.7利用快速的萤幕写入 11
1.4.8使用规格化的设备座标 12
1.4.9韧体 13
1.5绘图程式编写的体例 13
1.5.1外观和明晰度 14
1.5.2调位字元 15
1.5.3变数名称 15
第二章 绘图软体设计 17
2.1设定显示的模式及页数 18
2.1.1相容性 20
2.1.2设定显示模式 20
2.1.3设定显示页数 22
2.2 EGA上加强型绘图模式 24
2.2.1 EGA的绘图控制器 25
2.3开始用C写绘图程式 26
2.3.1使用C画点的二种方法 26
2.3.2 DOS下画点的命令 28
2.4部分C的绘图程式 30
2.4.1标头 30
2.4.2标头的使用 32
2.4.3位元栏 33
2.4.4宣告 35
2.4.5定义 35
2.4.6结构和组合 36
2.4.7使用Malloc做动态记忆体的 36
2.5流程图 37
2.5.1控制的世界 38
2.5.2实数的世界 39
2.5.3显示的世界 39
2.5.4编辑 39
2.5.5定位 40
2.6记忆体的模型 40
2.6.1小记忆体模式 41
2.6.2中记忆体模型 41
2.6.3大记忆体模型 41
2.7其它的显示缓冲器 42
2.7.1 (PGA) ProfessionalGraphics Adapter 42
2.7.2电视Video Display Adapter(VDA) 43
2.7.3 Image Capture Board(I CB) 43
2.7.4 TARGA Boards 44
2.7.5 TV Hard Copy 44
第三章 GRAPHIQ:原型的绘图程式 47
3.1 GRAPHIQ程式的描述 48
3.2提供的设备 49
3.2.1定位的设备 49
3.2.2编辑用的显示设备 49
3.2.3硬拷用的显示设备 50
3.2.4贮存的设备 50
3.3资料库的设计 50
3.3.1向量和Raster 51
3.3.2显示幕的倾印 52
3.4 GRAPHIQ的档案结构 52
3.4.1循序档案 53
3.4.2随机档案 53
3.4.3档案结构的样本 53
3.4.4档案标头中的组合(union) 54
3.4.5二维的属性 55
3.4.6桌上型的印刷(Desktop Publishing) 55
3.4.7变数的使用 56
3.4.8档案的存取方法 60
3.5 GRAPHIQ的限制 61
3.6增强GRAPH IQ功能的建议 61
3.6.1椭圆的画法 62
3.6.2三度空间的绘图 62
3.6.3曲面的模型 63
3.6.4商业和科学用的绘图程式 63
第四章 绘图演算法 65
4.1座标系 66
4.1.1矩形座标 66
4.1.2极座标 67
4.2绘画元素 69
4.2.1点 69
4.2.2定位 70
4.2.3像素 71
4.2.4线段 72
4.2.5弧线 72
4.2.6填充(FillS) 73
4.3绘线演算法 74
4.3.1方格萤幕 75
4.3.2 Bresenham的绘线演算法 78
4.3.3不一样的线 80
4.3.4线的宽度 81
4.3.5圆滑化 82
4.4绘圆演算法 83
4.4.1 Bresenham的绘圆演算法 84
4.4.2原点转换 88
4.4.3不一样的圆 88
4.4.4圆的宽度 89
4.5绘弧线 89
4.5.1方向性 89
4.5.2三点圆 90
4.6填色演算法 92
4.6.1填充 93
4.6.2淹没法 94
4.6.3内凹图形 97
4.6.4不均匀的填充 99
4.6.5平滑化 100
4.6.6画笔 100
4.6.7调色盘 101
4.7网目著色法(CROSSHATCHING) 101
4.7.1在某个角度以网目著色 103
4.7.2以线为基础和以点为基础的系统 103
4.8配色(DITHERING) 104
4.8.1加成性和吸收性颜色 104
4.8.2配色矩阵 105
4.8.3由电视上配色 107
4.8.4从座标串列中配色 108
4.8.5 DITHER程式的分析 116
4.9切割 119
4.9.1切割视窗 119
4.9.2一种切割演算法 120
4.9.3切割演算法的执行过程 124
4.9.4利用数值共同处理器来进行切割 126
4.9.5 EGA以及软体切割 126
4.10模型表(shape table) 127
4.10.1模型的旋转,平移,以及定尺度 127
4.10.2间隔 128
4.10.3模型矩阵 129
4.10.4模型座标表列 130
4.10.5字型(font) 131
4.10.6字串物体 132
4.10.7在模型表中使用绘图指令 132
4.11由演算法来产生C程式码 133
4.11.1注意假定状况 133
4.11.2数值舍入的误差问题 134
4.11.3维持线资料库 135
第五章 转换 137
5.1物体 138
5.1.1物体识别单元 138
5.1.2编辑物体 139
5.2旋转 141
5.2.1旋转参数 143
5.2.2旋转状态 143
5.2.3三维旋转 144
5.2.4复合三维旋转的反程序 146
5.3平移 146
5.3.1三维平移 148
5.4定比例 148
5.4.1轴向比例 149
5.4.2三维空间的定比例方法 149
5.4.3变形 150
5.5复合转换 150
5.5.1转换顺序 151
5.6投影 152
5.6.1投影座标系统 153
5.6.2点的投影 154
5.6.3投影计算 157
5.6.4过滤投射影像 157
5.7编写转换函式的一般注意事项 159
5.7.1注意数学错误 159
5.7.2尽量利用较快的硬体 160
5.7.3使用指标引数 160
5.7.4利用组合语言来使转换最佳化 161
第六章 编辑模式 165
6.1编辑中所应用的函式 166
6.1.1典型的绘图函式 166
6.2编辑中使用的功能表和命令 167
6.2.1程式--功能的骨架 168
6.2.2功能表--参考的架构 168
6.2.3经由命令来执行函式 169
6.2.4由功能表来执行函式 170
6.3画一个点 172
6.3.1像素画法的多样性 173
6.3.2利用EGA绘图控制器来绘制像素 173
6.3.3一般性的像素绘制函式 175
6.3.4以透视法画点 185
6.4绘制线段 188
6.4.1使用演算法绘制线段 188
6.4.2如何使用绘线功能 197
6.4.3依透视法绘制线段 199
6.5绘制圆和弧 204
6.5.1 Bresenham圆 205
6.5.2由弦组成的圆 210
6.5.3圆的其它要求 218
6.6绘制方框 219
6.6.1使用Boxx() 220
6.7充填方框 222
6.7.1使用fillbox() 223
6.8复杂的充填 224
6.8.1复杂的充填如何工作 228
6.8.2作用中的复杂充填 228
6.9直线、圆、方框和充填的结合 230
6.9.1实际的应用 231
6.10使用一支画笔 233
6.10.1储存画笔的样型 234
6.10.2画笔阵列 234
6.10.3绘制画笔样型 235
6.10.4画笔颜色 236
6.11拷贝 237
6.11.1过渡缓冲器 237
6.11.2不经过渡缓冲器的拷贝 238
6.11.3作用中的拷贝 240
6.12编辑的组织协调 242
第七章 文字模式 245
7.1 ASCII字元组 246
7.1.1显示字元组 246
7.2笔画字型 254
7.2.1单元字元 254
7.2.2笔画 254
7.2.3 BIOS模型表 255
7.2.4 BIOS中的笔画字型 259
7.2.5读取笔画字型 264
7.2.6使用笔画字型 268
7.2.7文字的组织协绸 277
7.2.8文字的硬拷 279
第八章 列印和绘图 285
8.1图的列印 287
8.1.1点矩阵的协定(protocol) 288
8.1.2使用并列埠 297
8.1.3实际的dithering技巧 299
8.1.4列印的函式 300
8.2用绘图机画图 302
8.2.1绘图机 303
8.2.2使用串列埠 304
8.2.3串列埠的初始化 316
8.2.4绘图的函式 318
8.2.5传送字串到绘图机 323
8.3编整列印和绘图函式 325
8.3.1执行列印函式 326
8.3.2执行绘图函式 326
8.3.3绘图或列印的终止 327
8.3.4使用GRAPH IQ绘图和列印 327
第九章 功能表设计(Menu Design) 329
9.1建立功能表 332
9.1.1在EGA绘图模式下的上拉式功能表 332
9.1.2在EGA文字模式下的上拉式功能表 337
9.2从功能表中选择 341
9.2.1显示幕的背景 341
9.2.2反相文字游标 343
9.3快速的功能表显示技术 350
9.3.1区块记忆体的移动 351
9.3.2运用图形控制器 352
9.3.3 EGA图形控制器 352
9.3.4读取及移动显示幕的资料 354
9.3.5清除萤幕 358
9.4键盘介面 359
9.4.1非破坏性的命令输入 360
第十章 定位器 367
10.1定位器的设计 369
10.1.1定位器的型态 369
10.1.2聪明的定位器(Smart Locator) 371
10.2定位器的编码 372
10.2.1移动位元的样式 372
10.2.2瞭解定位器的函式 378
10.2.3全萤幕的定位器 381
10.2.4旋转过的全萤幕定位器 384
第十一章 并行和序列介面 391
11.1并行埠 393
11.1.1经由并行埠传送字元 393
11.1.2监视印表机状态 394
11.1.3不使用DOS或BIOS的并行输出 395
11.1.4从并行埠接收字元 398
11.1.5并行介面惊鸿一瞥 401
11.1.6注意:被反相的插脚状态 403
11.2序列埠 403
11.2.1非同步通讯 404
11.2.2序列埠的暂存器 404
11.2.3序列插断服务 417
11.2.4数位板介面 426
11.2.5老鼠介面 433
11.2.6光笔介面 438
11.2.7序列输出介面 440