50 lines
2.3 KiB
Markdown
50 lines
2.3 KiB
Markdown
# 图形系统:坐标、位图与绘制
|
||
|
||
> 原书依据:第 14–15 章,印刷页 96–117,PDF 页 107–128。
|
||
|
||
图形对象不是外接的独立语言。坐标、矩形、位图、光标和绘图动作都通过消息协议组织。
|
||
|
||
## Point 与 Rectangle
|
||
|
||
```smalltalk
|
||
12 @ 18
|
||
(12 @ 18) x
|
||
(12 @ 18) y
|
||
```
|
||
|
||
`@` 是向数字发送的二元消息,产生一个 Point。后两条分别取 x 与 y。因为 `@` 和 `+` 同为二元消息,混用时最好加括号。
|
||
|
||
Rectangle 表示矩形区域。阅读构造调用时要分清传入的是角点还是尺寸;阅读几何操作时要区分包含、相交、平移和缩放。边界点是否包含应核对具体方法,不能只凭图形直觉。
|
||
|
||
## 坐标系必须写在图旁
|
||
|
||
原书图形环境的屏幕坐标通常从左上向右下增加;数学曲线常要求 y 轴向上。因此绘制之前要说明对象坐标与显示坐标之间的转换。
|
||
|
||
```text
|
||
模型坐标 → 视图变换 → 显示坐标 → 裁剪 → 像素绘制
|
||
```
|
||
|
||
相同点在不同视图中可以对应不同屏幕位置。移动视口时只改变显示映射,不应顺便改变领域模型中的坐标。
|
||
|
||
## 从存储到绘制
|
||
|
||
| 对象 | 阅读重点 |
|
||
| --- | --- |
|
||
| `Bitmap` | 像素位信息的底层存储 |
|
||
| `DisplayObject` | 可显示对象的公共概念 |
|
||
| `DisplayText` | 文本的图形表示 |
|
||
| `Form` | 位图图像、尺寸与显示属性 |
|
||
| `Cursor` | 光标图形 |
|
||
| `DisplayScreen` | 屏幕显示对象 |
|
||
| `Path` | 图形路径 |
|
||
| `BitBlt` | 源区域到目标区域的位图传输与组合 |
|
||
| `Pen` | 以位置和移动描述绘图 |
|
||
|
||
研究 BitBlt 时记录源、目标、传输区域、裁剪范围和组合规则。它涉及像素组合,不只是语言层面的对象复制。Form 的副本若共享底层位图,修改像素仍可能影响原图;这与对象协议篇的浅复制问题相连。
|
||
|
||
## 曲线绘制的最小思路
|
||
|
||
把函数保存为块,对一系列 x 求 y,转换成显示点,再用线段连接。采样步长越大,细节越容易丢失。固定采样不是精度保证;异常值、坐标越界和不连续曲线都需要额外策略。
|
||
|
||
这是对原书曲线案例的阅读提示,不是新增的绘图运行时。下一篇先介绍如何借助系统工具观察这些对象,再进入 MVC 的连接过程。
|