计算机图形学实验文件.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机图形学实验文件.doc

课程名称计算机图形学实验项目 直线裁剪 批改日期 成 绩 一算法设计 (1)整条直线在窗口内。此时,不需剪裁,显示整条直线。 (2)整条直线在窗口外,此时,不需剪裁,不显示整条直线。 (3)部分直线在窗口内,部分直线在窗口外。此时,需要求出直线与窗框的交点,并将 窗口外的直线部分剪裁掉,显示窗口内的直线部分。 直线剪裁算法有两个主要步骤。首先将不需剪裁的直线挑出,即删去在窗外的直线。然 后,对其余直线,逐条与窗框求交点,并将窗口外的部分删去。 以区域编码为基础, 将窗口及其周围的 8 个方向以 4 bit 的二进制数进行编码。 如图1-24 所示的编码方法将窗口及其邻域分为5 个区域。 (1)内域:区域( 0000)。 (2)上域:区域( 1001,1000,1010)。 (3)下域:区域 (0101, 0100, 0110)。 (4)左域:区域 (1001, 0001, 0101)。 窗口及其邻域的 5 个区域及与直线的关系 区域 (1010, 0010, 0110)。 当线段的两个端点的编码的逻辑 “与”非零时,线段显然为不可见的。对某线段的两各 端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右。算法的主要思 想是,对每条直线,如 P1P2 利用以下步骤进行判断: ①对直线两端点 P1、P2编码分别记为C1(P1)={ a1, b1, c1, d1} ,C2(P2)={ a2, b2, c2, d2} 其中, ai、bi、ci、di 取值范围为{1, 0} ,i∈{1, 2} 。 ② 如果 ai=bi=ci=di=0,则显示整条直线,取出下一条直线,返回步骤①;否则,进入 步骤③。 ③ 如果 |a1–a2 |=1,则求直线与窗上边( y=yw –max)的交点,并删去交点以上部分。如果 |b1–b2|=1,|c1–c2|=1,|d1–d2 |=1,进行类似处理。 ④ 返回步骤①判断下一条直线。 设计下图所示的菜单项。在工作区的 ResourceView 标签中,单击 Menu 项左边“ +”, 然后双击其子项 IDR_MAINFRAME ,并根据下图的定义编辑菜单资源。 菜单标题 菜单项标题 标示符 ID 裁剪 线段裁剪 ID_CLIPLINE 添加消息处理函数。 利用 ClassWizard (建立类向导)为应用程序添加与菜单项相关的消息处理函数, ClassName 栏中选择 CMyView ,下表建立如下的消息映射函数, ClassWizard 会自动完成有 关的函数声明。 菜单项 ID 消 息 消息处理函数 ID_CLIPLINE CONMMAN OnIDTRANSLATION 利用 ClassWizard(建立类向导)为应用程序添加鼠标响应函数 OnLButtonDblClk ,以 实现双击鼠标左键弹出所要进行裁剪的直线,在这里应用了 mylineView.h 中定义的类 CPoint 的一个对象数组,来存放所要画直线的一些点。 二程序代码 函数代码,程序如下: ① 在“图形裁剪 View.h ”文档中的适当位置添加定义存储线段端点的数组。 #include N 9 public: CPoint ptset[N]; 在“mylineView.cpp ”适当位置添加以下代码。 #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 #define XL 100 #define XR 300 #define YT 100 #define YB 250 在OnDraw 中添加下列代码:以下的数据为所要生成直线的起点与终点 CPen newpen(PS_SOLID,1,RGB(255,0,0)); CPen *old=pDC-SelectObject(newpen); pDC-Rectangle(CRect(XL,YT,XR,YB));// 剪切窗口 ptset[0]=CPoint(120,150); ptset[1]=CPoint(170,110); ptset[2]=CPoint(400,0); ptset[3]=CPoint(350,150); ptset[4]=CPoint(0,250); ptset[5]=CPoint(150,230); ptset[6]=CPoint(200,50); ptset[7]=CPoint(130,200); pDC-TextOut(0,0, 双击鼠标左键出现要裁剪的直线 ); 在添加的鼠标响应函数 OnLButtonDblClk 里加入下列代码用来在双击鼠标左键时生成要裁剪的直 线 CDC* pDC=GetDC(); CPen newpen(PS_SOLID,1,RGB(255,0,0)); C

文档评论(0)

liuxiaoyu99 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档