计算机图形学实验指导书.pdf

上传人:奔*** 文档编号:92972508 上传时间:2023-06-18 格式:PDF 页数:79 大小:9.48MB
返回 下载 相关 举报
计算机图形学实验指导书.pdf_第1页
第1页 / 共79页
计算机图形学实验指导书.pdf_第2页
第2页 / 共79页
点击查看更多>>
资源描述

《计算机图形学实验指导书.pdf》由会员分享,可在线阅读,更多相关《计算机图形学实验指导书.pdf(79页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 计 算 机 图 形 学 实 验 指 导 书 主 讲:陈 卓(副 教 授)教 材:计 算 机 图 形 学 原 理 及 算 法 教 程(VC+版)信 息 学 院 计 算 机 系 计 算 机 软 件 教 研 室 2008年 8 月 2 5日*刖 三 随 着 计 算 机 科 学 与 技 术 的 迅 猛 发 展,特 别 是 大 规 模 集 成 电 路 和 超 大 规 模 集 成 电 路 技 术 的 飞 速 发 展,计 算 机 已 经 成 为 一 种 高 速、费 用 低 的 生 成 图 形 的 有 效 工 具。计 算 机 图 形 学 作 为 利 用 计 算 机 生 成 图 形 的 技 术,已 经 越 来

2、 越 广 泛 地 在 各 个 领 域 得 到 应 用。随 着 计 算 机 图 形 学 应 用 领 域 的 拓 宽 和 应 用 水 平 的 提 高,人 们 越 来 越 重 视 对 该 项 技 术 的 研 究 和 利 用。当 今,计 算 机 图 形 学 已 经 成 为 了 计 算 机 科 学 技 术 领 域 的 一 个 重 要 研 究 方 向,并 被 广 泛 的 应 用 于 科 学 计 算、工 程 设 计、医 药、工 业、艺 术、娱 乐 业、广 告 业、教 育 与 培 训、商 业 和 政 府 部 门 等。鉴 于 计 算 机 图 形 学 的 重 要 性 和 应 用 的 广 泛 性,计 算 机 科 学

3、 与 技 术 专 业 将 其 设 置 为 专 业 必 选 的 选 修 课。它 主 要 是 研 究 用 计 算 机 及 其 图 形 设 备 来 输 入、表 示、变 换、运 算 和 输 出 图 形 的 原 理、算 法 及 系 统。通 过 对 本 课 程 的 学 习,使 学 生 对 计 算 机 图 形 学 有 一 个 完 整 的 了 解,并 为 进 行 计 算 机 图 形 学 应 用 和 研 究 打 下 扎 实 基 础。为 了 让 学 生 深 入 理 解 各 种 图 形 算 法 和 相 关 理 论 知 识,贯 彻 学 生 学 习 知 识 是 为 了 应 用 知 识、应 用 就 要 追 求 创 新 应

4、 用 的 思 想 和 意 识,设 计 了 7 个 实 验。通 过 实 验,使 学 生 更 加 深 入 的 理 解 计 算 机 图 形 系 统 的 工 作 机 理 和 基 本 图 形 生 成 和 处 理 算 法。实 现 语 言 为 Turbo C、Visual C+6.0、OpenGl,或 其 它 学 生 掌 握 的 高 级 语 这 些 实 验 是 对 学 生 的 一 种 多 全 面 训 练。它 着 眼 于 原 理 与 应 用 的 结 合,使 学 生 学 会 如 何 把 书 上 学 到 的 知 识 用 于 解 决 实 际 问 题,培 养 软 件 工 作 所 需 要 的 动 手 能 力;另 一 方

5、 面,能 使 书 上 的 知 识 变“活”,起 到 深 化 理 解 和 灵 活 掌 握 教 学 内 容 的 目 的。在 实 验 过 程 中,能 够 培 养 学 生 的 自 学 能 力、团 队 协 作 能 力、解 决 问 题 能 力、软 件 开 发 能 力 等 多 种 能 力。目 录 实 验 补 充 Visual C+图 形 程 序 设 计.1一、实 验 目 的.1二、实 验 任 务.1三、基 础 知 识 和 实 验 步 骤.13.1 Visual C+6.0应 用 程 序 开 发 方 法.13.1.1 Visual C+的 集 成 开 发 环 境.13.1.2 应 用 程 序 工 程 的 建

6、立 方 法.23.1.3 输 入 源 程 序 进 行 程 序 设 计.53.2 图 形 设 备 接 口 和 图 形 程 序 设 计.73.2.1 图 形 设 备 接 口 简 介.73.2.2 绘 制 基 本 图 形.83.2.3 画 笔 与 画 刷.123.2.4 文 本 显 示.163.3 鼠 标 编 程.173.3.1 鼠 标 消 息 处 理.173.3.2 捕 捉 鼠 标.183.3.3 鼠 标 编 程 综 合 示 例.183.4 菜 单 程 序 设 计.233.4.1 菜 单 编 辑 器.243.4.2 菜 单 消 息 响 应.263.4.3 综 合 示 例.26四、实 验 总 结.2

7、9实 验 一 基 本 图 形 的 生 成 技 术.30A.直 线 生 成 算 法.30一、实 验 目 的.30二、实 验 任 务.30三、基 本 知 识 和 实 验 步 骤.30任 务 一:实 现 三 种 画 线 程 序.30任 务 二:放 大 10倍 后,算 法 演 示 程 序.32任 务 三:加 入 鼠 标 功 能,实 现 交 互 式 画 直 线.34四、实 验 结 果 和 分 析.36五、实 验 总 结.36B.圆、椭 圆 生 成 算 法.37一、实 验 目 的.37二、实 验 任 务.37三、实 验 内 容.37任 务 一:中 点 画 圆 法 的 扫 描 转 换 算 法.38任 务 二

8、:添 加 鼠 标 程 序,实 现 交 互 式 画 圆.40任 务 三:编 写 中 点 画 椭 圆 法 的 扫 描 转 换 程 序.42任 务 四:添 加 鼠 标 程 序,实 现 交 互 式 画 椭 圆.43四、实 验 结 果、分 析 和 总 结.45实 验 二 基 本 图 形 处 理 技 术.46A.区 域 填 充 算 法.46一、实 验 目 的.46二、实 验 任 务.46三、实 验 步 骤.46四、实 验 结 果、分 析 和 总 结.50B.线 段 裁 剪 算 法.51一、实 验 目 的.51二、实 验 任 务.51三、实 验 步 骤.51任 务 一:编 码 裁 剪 算 法 的 程 序 设

9、 计.52任 务 二:用 鼠 标 实 现 交 互 式 裁 剪 效 果.54四、实 验 结 果 和 总 结.58实 验 三 二 维 几 何 变 换.59一、实 验 目 的.59二、实 验 任 务.59三、实 验 内 容 和 实 验 步 骤.59任 务 一:根 据 数 学 模 型,编 写 几 何 变 换 程 序.59任 务 二:利 用 鼠 标 实 现 交 互 式 移 动 图 形.62四、实 验 分 析 和 总 结.64实 验 四 曲 线 与 曲 面.65一、实 验 目 的.65二、实 验 任 务.65三、实 验 内 容 和 实 验 步 骤.65任 务 一:抛 物 线 程 序 设 计.65任 务 二

10、:Hermite 曲 线 程 序 设 计.66任 务 三:B e z ie r曲 线 的 算 法 实 现.67任 务 四:三 次 B样 条 曲 线 的 算 法 实 现.72参 考 文 献.74附 录 A 实 验 报 告 规 范.75实 验 补 充 Visual C+图 形 程 序 设 计 一、实 验 目 的 Visual C+是 在 Microsoft C 的 基 础 上 发 展 而 来 的,随 着 计 算 机 软、硬 件 技 术 的 快 速 发 展,如 今 Visual C+已 成 为 集 编 辑、编 译、运 行、调 试 于 一 体 功 能 强 大 的 集 成 编 程 环 境。本 章 以 V

11、isual C+6.0为 对 象,主 要 介 绍 Visual C集 成 编 成 环 境 的 使 用、图 形 设 备 接 口 和 常 用 图 形 程 序 设 计、鼠 标 编 程 以 及 菜 单 设 计 等 基 础,目 的 是 通 过 对 Visual C+的 学 习,掌 握 VisualC+图 形 程 序 设 计 的 方 法,为 计 算 机 图 形 学 原 理 部 分 的 算 法 实 现 提 供 程 序 工 具 和 方 法。二、实 验 任 务(需 要 课 外 学 时 8学 时)1.学 习 Visual C+图 形 程 序 设 计 的 方 法;2.掌 握 Visual C+集 成 编 成 环 境

12、 的 使 用、图 形 设 备 接 口 和 常 用 图 形 程 序 设 计、鼠 标 编 程、橡 皮 筋 交 互 技 术、画 刷 与 画 笔 以 及 菜 单 设 计 等;三、基 础 知 识 和 实 验 步 骤 3.1 Visual C+6.0应 用 程 序 开 发 方 法 介 绍 Visual C+6.0集 成 开 发 环 境,以 一 个 简 单 的 实 例 介 绍 利 用 Visual C+应 用 程 序 工 程 建 立 方 法 和 程 序 设 计 框 架。3.1.1 Visual C+的 集 成 开 发 环 境 从 开 始 菜 单 中 启 动 Visual C+6.0,进 入 开 发 集 成

13、环 境。打 开 一 个 项 目 后,可 以 看 到 VisualC+6.0的 开 发 环 境 由 标 题 栏、工 具 栏、工 作 区 窗 口、源 代 码 编 辑 窗 口、输 出 窗 口 和 状 态 栏 组 成,见 图 3.1所 示。标 题 栏 用 于 显 示 应 用 程 序 名 和 所 打 开 的 文 件 名,标 题 栏 的 颜 色 可 以 表 明 对 应 窗 口 是 否 被 激 活。菜 单 栏 包 括 文 件、编 辑、显 示、插 入、工 程、编 译、工 具、窗 口 和 帮 助 九 项 主 菜 单,包 含 了 从 源 代 码 的 编 辑、界 面 设 计、程 序 调 试 和 编 译 运 行 在

14、内 的 所 有 功 能。工 具 栏 列 出 了 常 用 的 菜 单 命 令 功 能 和 对 象 方 法。工 具 栏 的 下 面 是 两 个 窗 口,一 个 是 工 作 区 窗 口,用 于 列 出 工 程 中 的 各 种 对 象,一 个 是 源 代 码 编 辑 窗 口,用 于 各 个 对 象 的 程 序 设 计。输 出 窗 口 显 示 项 目 建 立 过 程 中 所 产 生 的 各 种 信 息。屏 幕 底 端 是 状 态 栏,它 给 出 当 前 操 作 或 所 选 择 命 令 的 提 示 信 息。菜 单 栏 工 作 区 状 态 栏 源 代 码.编 辑 窗 标 题 栏 图 3.1 Visual C

15、+6.0集 成 开 发 环 境 3.1.2 应 用 程 序 工 程 的 建 立 方 法 Visual C+提 供 了-种 称 为 App W izard的 工 具,利 用 该 工 具,用 户 可 以 方 便 地 按 照 自 己 的 需 要 创 建 符 合 需 要 的 应 用 程 序 框 架。在 这 个 基 础 上,用 户 可 以 进 一 步 将 自 己 编 写 的 程 序 加 入 到 这 个 框 架 中,实 现 用 户 程 序 的 功 能。下 面 介 绍 建 立 V cA pp应 用 程 序 框 架 的 方 法,其 它 应 用 程 序 的 方 法 都 与 此 类 似。第 一 步:启 动 Vis

16、ual C+,选 择 工 程 方 法 从 开 始 菜 单 中 选 择 Visual C+,进 入 Visual C+集 成 环 境。从 文 件 菜 单 中 选 择 新 建(New)命 令,弹 出 图 3-2对 话 框。切 换 到 工 程(Projects)标 签,项 目 类 型 选 择 MFC AppWizard(exe),输 入 工 程 的 名 字(如 V c A p p),选 择 项 目 放 置 的 位 置,然 后 单 击“确 定”按 钮。图 3-2 Visual C+的 N ew对 话 框 第 二 步:设 置 应 用 程 序 的 特 性。这 些 设 置 包 括 六 个 问 题,每 一 个

17、 问 题 都 有 不 同 的 选 项 供 选 择。一 个 问 题 选 择 完 后,通 过“下 一 步(N ex t)选 择 下 一 个 问 题,直 到 六 个 问 题 选 择 完 毕。还 可 以 通 过“上 一 步”(Back)返 回 上 一 个 问 题 重 新 选 择。下 面 继 续 上 血 的 例 子,在 单 击“确 定”按 钮 后,弹 出 第 一 个 问 题 窗 口,如 图 3-3所 示。第 一 个 问 题 是 建 立 什 么 类 型 的 应 用 程 序,有 三 个 选 项:单 个 文 档(Single document),多 重 文 档(Multiple docum ent)和 基 本

18、 对 话(Dialog based)。单 个 文 档 应 用 程 序 主 窗 口 中 只 有 一 个 窗 口,多 重 文 档 可 以 在 主 窗 口 中 开 多 个 子 窗 口,基 本 对 话 主 窗 口 是 一 个 对 话 框。例 中 选 择 单 个 文 档,单 击“确 定”,进 入 下 一 个 问 题,如 图 3 4 所 示。第 二 个 问 题 是 数 据 库 的 支 持,是 否 用 O D B C存 取 数 据 库,有 四 个 选 项:不 包 括 数 据 库 的 支 持(None)、仅 包 含 ODBC头 文 件(Header Ries only)、指 定 一 个 数 据 库 但 没 有

19、 文 件 支 持 和 指 定 一 个 数 据 库 但 需 要 文 件 支 持。当 选 择 了 后 两 项,则 需 要 用 户 选 择 一 个 已 经 建 立 的 数 据 库。例 中 不 需 要 数 据 库 支 持,选 择 第 一 个 选 项“否”,进 入 第 三 个 问 题,如 图 3-5所 示。图 3-3 第 一 个 问 题:选 择 应 用 程 序 的 类 型 图 3 4 第 二 个 问 题:选 择 是 否 要 用 ODBC支 持第 三 个 问 题 是 对 ActiveX的 支 持。有 五 个 选 项:(1)没 有 对 ActiveX的 支 持;(2)ActiveX容 器,它 可 以 包 含

20、 链 接 和 嵌 入 对 象。容 器 不 能 为 其 它 的 ActiveX程 序 提 供 支 持,它 只 能 维 护 嵌 入 对 象;(3)微 型 服 务 器(Mini-server),应 用 程 序 不 能 独 立 运 行,只 能 被 调 用 为 其 它 程 序 建 立 ActiveX对 象。(4)完 整 服 务 器(Full-server),它 能 够 独 立 运 行,并 能 够 为 其 它 应 用 程 序 建 立 ActiveX对 象。(5)容 器 和 服 务 器,一 个 应 用 程 序 可 以 同 时 是 容 器 和 服 务 器。在 例 子 中,选 择 第 一 个 选 项,没 有 对

21、 A ctiveX的 支 持,单 击“下 一 个(Next)进 入 下 一 个 问 题。FC JLppV&xar d-S t J“6,Q 不 s 完 整 艇 务 A 有 等 H B R务 券 r 你 喜 女 便 用 什 么 复 合 文 档 支 持?你 喜 欢 包 含 其 他 直 挎?r u 自 动 逢 信 q B ActiveX B 上 一 t|H f 一 个|E 完 成|取 治 图 3-5 第 三 个 问 题:选 择 是 否 对 ActiveX的 支 持 第 四 个 问 题 是 应 用 程 序 的 特 性 和 高 级 选 项,如 图 3-6所 示。图 3-6 应 用 程 序 的 特 性 和

22、高 级 选 项 例 中 全 部 采 用 默 认 选 项,进 入 下 一 个 问 题。第 五 个 问 题 是 项 目 的 风 格、原 文 件 注 释 和 M FC库 类 型,如 图 3-7所 示。在 例 子 中 全 部 采 用 默 认 选 项,进 入 第 六 个 问 题。第 六 个 问 题 是 确 定 类 名 和 文 件 名,如 图 3-8所 示。基 于 第 一 个 问 题 到 第 五 个 问 题 的 回 答,AppW izard会 把 将 要 建 立 的 新 类 的 名 称 通 知 用 户。AppW izard将 为 应 用 程 序 建 立 四 个 新 类,CVcAppApp是 应 用 程 序

23、 类,它 是 CWinApp的 派 生 类。CMainFrame是-一 个 拥 有 应 用 程 序 主 窗 口 的 类。CVcAppDoc和 CVcAppView是 该 应 用 程 序 的 文 档 和 视 图 类。这 些 名 字 用 户 可 以 改 变。最 后 单 击“完 成(Finish),显 示 所 建 项 目 的 信 息,单 击“确 定”后,项 目 建 立 完 成。图 3-7 项 目 的 风 格、原 文 件 注 释 和 M FC库 类 型 图 3-8 通 知 M FC产 生 的 类 名 称 3.1.3 输 入 源 程 序 进 行 程 序 设 计 应 用 程 序 项 目 工 程 建 立 以

24、 后,就 为 应 用 程 序 的 开 发 建 立 了 一 个 框 架,这 是 不 输 入 任 何 程 序 代 码,对 该 项 目 程 序 进 行 编 译 和 运 行,可 以 生 成 一 个 完 整 的 窗 口 程 序。用 户 根 据 项 目 工程 中 的 不 同 类,输 入 自 己 设 计 的 程 序 代 码,完 成 用 户 的 程 序 设 计。例 如,从 VcApp Classes中 找 到 CVcAppView的 OnDraw()函 数,如 图 3-9所 示。双 击 On Draw()函 数,这 时 系 统 会 打 开 VcAppView.cpp文 件,而 且 光 标 正 置 于 OnDr

25、aw()函 数 中,在 其 中 输 入 下 列 语 句:pDC-TextOut(30,30,”同 学 们 好,欢 迎 使 用 VC+编 程!);编 译 并 运 行 该 程 序,运 行 结 果 如 图 3-10所 示。图 3-9 输 入 程 序 源 代 码 图 3-1 0 运 行 结 果3.2 图 形 设 备 接 口 和 图 形 程 序 设 计 3.2.1 图 形 设 备 接 口 简 介 在 W indow s系 统 中,程 序 都 是 通 过 一 个 叫 做 图 形 设 备 接 口(GDI,Graphics DeviceInterface)的 抽 象 接 口 和 硬 件 打 交 道,Windo

26、ws会 自 动 将 设 备 环 境 表 映 射 到 相 应 的 物 理 设 备,并 且 会 提 供 正 确 的 输 入/输 出 指 令。G D I是 Windows系 统 核 心 的 三 种 动 态 链 接 库 之 一,它 管 理 W indows系 统 的 所 有 程 序 的 图 形 输 出。在 W indows系 统 中,G D I向 程 序 员 提 供 了 高 层 次 的 绘 图 函 数,只 要 掌 握 这 些 绘 图 函 数,就 可 以 很 方 便 地 进 行 图 形 程 序 设 计。另-个 概 念 是 设 备 描 述 表(DC,Device Context),D C是 一 个 数 据

27、 结 构,当 程 序 向 GDI设 备 中 绘 图 时,需 要 访 问 该 设 备 的 DC。M FC将 G D I的 D C封 装 在 C+类 中,包 括 C D C类 和 CD C派 生 类,这 些 类 中 的 许 多 成 员 都 是 对 本 地 G D I绘 图 函 数 进 行 简 单 封 装 而 形 成 的 内 联 函 数。D C的 作 用 就 是 提 供 程 序 与 物 理 设 备 或 者 虚 拟 设 备 之 间 的 联 系,除 此 之 外,D C还 要 处 理 绘 图 属 性 的 设 置,如 文 本 的 颜 色 等。程 序 员 可 以 通 过 调 用 专 门 的 G D I函 数

28、修 改 绘 图 属 性,如 SetTextColor。函 数。C D C类 是 G D I封 装 在 M F C中 最 大 的 个 类,它 表 示 总 的 DC。表 3.1列 出 了 C D C中 的 一 些 常 用 绘 图 函 数。表 3 1 C D C类 中 常 用 绘 图 函 数 函 数 描 述 使 用 频 率 Arc()椭 圆 弧*BitBlt()把 位 图 从 一 个 D C拷 贝 到 另 一 个 DC*Draw3dRectO绘 制 三 维 矩 形*DrawDragRect()绘 制 用 鼠 标 拖 动 的 矩 形*DrawEdge()绘 制 矩 形 的 边 缘*Drawlcon()

29、绘 制 图 标*Ellipse()绘 制 椭 圆*FillRect()绘 制 用 给 定 的 画 刷 颜 色 填 充 矩 形*FillRgn()绘 制 用 给 定 的 画 刷 颜 色 填 充 区 域*FillSolidRed()绘 制 用 给 定 的 颜 色 填 充 矩 形*FloodFill()用 当 前 的 画 刷 颜 色 填 充 区 域*FrameRcct()绘 制 矩 形 边 界*FrameRgn()绘 制 区 域 边 界*GetBKColor()获 取 背 景 颜 色*GetCurrentB itmap()获 取 所 选 位 图 的 指 针*GetCurrentBrush()获 取

30、所 选 画 刷 的 指 针*GetCurrentFont()获 取 所 选 字 体 的 指 针*GetCurrentPalette()获 取 所 选 调 色 板 的 指 针*GetCurrentPen()获 取 所 选 画 笔 的 指 针*GetCurrentPosition()获 取 画 笔 的 当 前 位 置*GetDeviceCaps()获 取 显 示 设 备 能 力 的 信 息*这 些 函 数 的 语 法 和 使 用 可 以 通 过 M SDN帮 助 查 询。3.2.2节 主 要 介 绍 Windows中 基 本 图 GetMapMode()获 取 当 前 设 置 映 射 模 式*Ge

31、tpixel()获 取 给 定 像 素 的 RG B颜 色 值*GetPolyFillMode()获 取 多 边 形 填 充 模 式*GetTextColor()获 取 文 本 颜 色*GetTextExtent()获 取 文 本 的 宽 度 和 高 度*GetTextMctrics()获 取 当 前 文 本 的 信 息*GetWindow()获 取 D C窗 口 的 指 针*GrayStringO 绘 制 灰 色 文 本*LineToQ 绘 制 直 线*MoveTo()设 置 当 前 画 笔 位 置*Pe()绘 制 饼 图*Polygon()绘 制 多 边 形*PolyLine()绘 制 一

32、 组 直 线*ReaIizePalette()将 逻 辑 调 色 板 映 射 到 系 统 调 色 板*Rectangle()绘 制 矩 形*RoundRect()绘 制 圆 角 矩 形*SelectObject()选 择 G D I绘 图 对 象*SelectPalette()选 择 逻 辑 调 色 板*SelectStockObject()选 择 预 定 义 图 形 对 象*SetBkColor()设 置 背 景 颜 色*SetMapMode()设 置 映 射 模 式*SetPixel()把 像 素 设 定 为 给 定 的 颜 色*SetTextColor()设 置 文 本 颜 色*Stre

33、tch Blt()把 位 图 从 一 个 D C拷 贝 到 另 一 个 D C,并 根 据 需 要 扩 展 或 压 缩 位 图*TextOut()绘 制 字 符 串 文 本*形,包 括 点、直 线、圆、圆 弧、矩 形、椭 圆、扇 形、折 线 等 程 序 设 计 3.2.2 绘 制 基 本 图 形(1)画 点 SetPixel。函 数 可 以 在 指 定 的 坐 标 位 置 按 指 定 的 颜 色 画 点。函 数 原 型 说 明 如 下:COLORREF CDC:SetPixel(int X,int Y,COLORREF crColor);其 中,(X,Y)为 点 的 坐 标 位 置,crC o

34、Ior参 数 为 点 的 颜 色 值。如 果 函 数 调 用 成 功,则 函 数 返 回 像 素 的 颜 色 值,否 则 返 回 值 为-1。颜 色 值 通 过 RGB(Red,Green,Blue)来 设 置,其 中 三 个 参 数 取 值 0255。例 如,在 VcAPP项 目 中,在 CVcAppView类 中 的 OnDraw()函 数 中 加 入 下 列 画 点 语 句:/绘 制-组 彩 色 点 绘 制 一 组 彩 色 点 pDC-TextOut(20,20,point:);pDC-SetPixel(l 00,20,RGB(255,0,0);pDC-SetPixel(ll 0,20,

35、RGB(0,255,0);pDC-SetPixel(l 20,20,RGB(0,0,255);pDC-SetPixel(l 00,20,RGB(255,255,0);pDC-SetPixel(100,20,RGB(255,0,255);pDC-SetPixel(l 00,20,RGB(0,255,255);pDC-SetPixeI(l 00,20,RGB(0,0,0);pDC-SetPixel(100,20,RGB(255,255,255);运 行 程 序,查 看 运 行 结 果。(2)画 直 线 和 折 线 画 直 线 需 要 LineTo()和 MoveTo()两 个 函 数 的 配 合

36、使 用。LineTo。函 数 以 当 前 位 置 所 在 的 点 为 直 线 的 起 点,另 指 定 一 个 点 为 直 线 的 终 点,画 出 一 段 直 线。直 线 的 颜 色 通 过 画 笔 的 颜 色 来 设 定,在 后 面 介 绍。LineTo()函 数 原 型 说 明 如 下:BOOLCDC:LineTo(int nXEnd,int nYEnd);直 线 的 终 点 位 置 由(nXEnd,n Y E n d)指 定。如 果 函 数 调 用 成 功,那 么 该 点 就 成 为 当 前 位 置,并 返 回 T R U E,否 则 返 回 FALSE。MoveTo()函 数 只 是 将

37、 当 前 位 置 移 动 到 指 定 位 置,它 并 没 有 画 出 直 线,其 函 数 说 明 为:BOOL CDC:MoveTo(int X,int Y);示 例:在 CVcAppView类 中 的 OnDraw()函 数 中 加 入 下 列 画 点 语 句:绘 制 直 线 pDC-TextOut(20,60,MLine:);pDC-MoveTo(20,90);pDC-LineTo(160,90);Polyline。函 数 用 来 回 一 条 折 线,而 PolyPolyline。函 数 则 用 来 画 多 条 折 线,它 们 的 函 数 原 型 说 明 如 卜.:BOOL CDC:Pol

38、yline(COUST POINT*lppt,int ePoints);BOOL CDC:PolyPolyline(COUST POINT*Ippt,COUST DWORD*lpdwPolyPoints,DWORD cCount);在 Polyline。函 数 中,Ippt是 指 向 折 线 顶 点 数 组 的 指 针,而 ePoints是 折 线 顶 点 数 组 中 的 顶 点 数。例 如,绘 制 一 条 具 有 4 个 顶 点 的 折 线,程 序 如 下:POINT polylinepoint4=70,240,20,190,70,190,20,240);pDC-Polyline(polyl

39、inepoint,4);在 PolyPolyline()函 数 中,Ip p t是 指 向 保 存 顶 点 数 组 的 指 针,而 各 条 折 线 的 顶 点 数 则 保 存 在 IpdwPolyPoints参 数 所 指 向 的 数 组 中,最 后 的 cCount参 数 指 定 折 线 的 数 目。例 如:POINT polypolylinePt9=95,160,120,185,1 20,250,145,160,120,185),90,185,150,185,80,210,160,210;DWORD dwPolyPoints4=3,2,2,2;分 四 段 折 线,分 别 占 用 3,2,2

40、,2 个 顶 点pDC-PolyPolyline(polypolylinePt,dwPolyPoints,4);注:由 于 一 条 折 线 至 少 需 要 2 个 顶 点,因 此 dwPolyPoints数 组 中 的 数 不 应 该 小 于 2。(3)画 弧 线 和 曲 线 通 过 Arc()函 数 画 弧 线 或 整 个 椭 圆。椭 圆 限 定 在 一 个 矩 形 内,称 为 外 接 矩 形。Arc()函 数 的 圆 形 说 明 如 BOOL CDC:Arc(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect,int nXSt

41、artArc,int nYStartArc,int nXEndArc,int nYEndArc);其 中,(nLeftRect,nTopRect)是 外 接 矩 形 的 左 上 角 坐 标 值,(nRightRect,nBottomRect)是 外 接 矩 形 的 右 下 角 坐 标 值。而 椭 圆 中 心 与 点(nXStartArc,nY StartA rc)所 构 成 的 射 线 与 椭 圆 的 交 点 成 为 弧 线 的 起 点,椭 圆 中 心 与 点(nXEndArc,nY E ndA rc)所 构 成 的 射 线 与 椭 圆 的 交 点 成 为 弧 线 的 终 点。椭 圆 上 从

42、始 点 到 终 点 就 形 成 一 条 弧 线。在 W indow s系 统 中,弧 线 从 始 点 到 终 点 的 方 向 是 逆 时 针 方 向,但 可 以 通 过 SetArcDirection。函 数 将 绘 制 弧 线 方 向 设 置 为 顺 时 针 方 向。示 例,用 Arc()绘 制 圆、圆 弧 和 椭 圆,程 序 如 下:for(i=l;iArc(260-5*i,70-5*i,260+5*i,70+5*i,0,0,0,0);)for(i=3;iArc(260-10*i,70-10*i,260+10*i,70+10*i,(int)260+10*i*cos(60*3.1415926

43、/180),(int)70+10*i*sin(60*3.1415926/180),(int)260+10*i*cos(60*3.1415926/180),(int)70-l 0*i*sin(60*3.1415926/180);pDC-Arc(260-10*i,70-10*i,260+10*i,70+10*i,(int)260-10*i*cos(60*3.1415926/180),(int)70-l 0*i*sin(60*3.1415926/180),(int)260-10*i*cos(60*3.1415926/180),(int)70+1 0*i*sin(60*3.1415926/180);B

44、 ezier曲 线 是 最 常 见 的 非 规 则 曲 线 之 一。Bezier曲 线 属 于 三 次 曲 线,需 要 四 个 控 制 顶 点 来 确 定 一 条 B e z ier曲 线,其 中 曲 线 通 过 第 一 点 和 最 后 一 点,并 且 第 一 条 边 和 最 后 一 条 边 是 曲 线 在 起 点 和 终 点 处 的 切 线,从 而 确 定 了 曲 线 的 走 向。PolyBezier。函 数 可 以 画 出 一 条 或 多 条 B ezier曲 线,其 函 数 原 型 说 明 如 下:BOOL CDC:PolyBezier(CONST POINT*Ippt,DWORD eP

45、oints);其 中,Ippt参 数 是 曲 线 控 制 顶 点 所 组 成 的 数 组,ePoints参 数 表 示 Ippt数 组 中 的 顶 点 数,条 B ezier曲 线 需 要 四 个 控 制 顶 点。如 果 Ippt数 组 用 于 画 多 条 B ezier曲 线,第 二 条 以 后 的 曲 线 只 需 要 三 个 控 制 顶 点,因 为 后 面 的 曲 线 总 是 把 前 一 条 曲 线 的 终 点 作 为 自 己 的 起 点。示 例,给 出 四 个 控 制 顶 点,画 出 一 条 B ezier曲 线 和 特 征 多 边 形。绘 缶 i j B e z ier曲 线 POIN

46、T polyBezier4=20,310,60,240,120,300,160,230);pDC-Polyline(polyBezier,4);pDC-PolyBezier(polyBezier,4);(4)画 封 闭 曲 线 Windows中 提 供 了 一 组 画 封 闭 曲 线 的 函 数,包 括 绘 制 矩 形、多 边 性、椭 圆 等,这 些 画 封 闭 曲 线 的 函 数 不 但 可 以 利 用 画 笔 来 画 出 轮 廓 线,同 时 还 可 以 利 用 画 刷 来 填 充 这 些 封 闭 曲 线 所 围 成 的 区 域。Rectangle。函 数 用 来 画 矩 形,其 函 数 原

47、 型 说 明 如 下:BOOLCDC:Rectangle(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect);其 中,参 数 nL eftR ect和 nTopR ect给 出 了 矩 形 左 上 角 的 坐 标,而 nRightRect和 nBottomRect则 给 出 矩 形 的 右 下 角 坐 标。Ellipse。函 数 的 作 用 则 是 画 椭 圆 形。在 Ellipse。函 数 中,椭 圆 是 山 其 外 接 矩 形 来 确 定 的,外 接 矩 形 的 中 心 与 椭 圆 中 心 重 合,矩 形 的 长 与 宽 和

48、 椭 圆 的 长 短 轴 相 等。函 数 说 明 如 下:BOOL CDC:Ellipse(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect);其 中 的 参 数 说 明 与 Rectangle。函 数 相 同。RoundRect()函 数 用 来 画 圆 角 矩 形,其 函 数 的 原 型 说 明 如 下:BOOL CDC:RoundRect(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect,int nWidth,int nHeight);其 中 的 前 四 个

49、 参 数 与 Rectangle。函 数 相 同,nW idth表 示 圆 角 的 宽 度,nHeight表 示 圆 角 的 高 度。Polygon。函 数 用 来 画 封 闭 的 任 意 多 边 形,其 函 数 原 型 说 明 如 卜.:BOOL CDC:Polygon(COUST POINT*lpPoints,int cCount);其 中 的 参 数 说 明 与 Polyline。函 数 相 同。但 两 个 函 数 有 区 别,Polygon。函 数 会 自 动 将 起点 和 终 点 相 连 形 成 封 闭 的 多 边 形,而 Polyline。函 数 则 画 出 多 条 折 线,只 有

50、 当 最 后 一 点 与 起 点 相 同 时 才 画 出 封 闭 的 多 边 形。示 例,绘 制 矩 形、圆 角 矩 形、椭 圆 和 多 边 形,程 序 如 下:绘 制 矩 形、圆 角 矩 形、椭 圆 和 多 边 形 pDC-Rectangle(l 90,270,250,310);pDC-RoundRect(265,270,330,310,30,20);pDC-Ellipse(260-50,200-30,260+50,200+30);POINT polygonPts3=390,160,430,220,350,210;pDC-Polygon(polygonPts,3);3.2.3 画 笔 与 画

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com