文档视界 最新最全的文档下载
当前位置:文档视界 › 利用任意多边形进行自由裁剪

利用任意多边形进行自由裁剪

①图片素材

②任意多边形工具

准备工作

步骤一

用任意多边形工具勾勒出人物(大概)模样

选中“图片”和画的“任意多边形”,然后选择【合并形状】-【相交】。步骤二注:顺序不能反!

【大功告成】

夜话PowerPoint

你好,我是曹将。

这个栏目来自于我的微博:@曹将PPTao。

那里有一些关于PPT东西,也有一些私人生活乱入。

请谨慎关注:)

Weiler-Atherton任意多边形裁剪算法

Weiler-Atherton任意多边形裁剪 Sutherland-Hodgeman算法解决了裁剪窗口为凸多边形窗口的问题,但一些应用需要涉及任意多边形窗口(含凹多边形窗口)的裁剪。Weiler-Atherton多边形裁剪算法正是满足这种要求的算法。 一、Weiler-Atherton任意多边形裁剪算法描述: 在算法中,裁剪窗口、被裁剪多边形可以是任意多边形:凸的、凹的(内角大于180o)、甚至是带有内环的(子区),见下图。 裁剪窗口和被裁剪多边形处于完全对等的地位,这里我们称: 1、被裁剪多边形为主多边形,记为A; 2、裁剪窗口为裁剪多边形,记为B。 主多边形A和裁剪多边形B的边界将整个二维平面分成了四个区域: 1、A∩B(交:属于A且属于B); 2、A-B(差:属于A不属于B); 3、B-A(差:属于B不属于A); 4、A∪B(并:属于A或属于B,取反;即:不属于A且 不属于B)。 内裁剪即通常意义上的裁剪,取图元位于窗口之内的部 分,结果为A∩B。 外裁剪取图元位于窗口之外的部分,结果为A-B。 观察右图不难发现裁剪结果区域的边界由被裁剪多边形的 部分边界和裁剪窗口的部分边界两部分构成,并且在交点处边 界发生交替,即由被裁剪多边形的边界转至裁剪窗口的边界, 或者反之。由于多边形构成一个封闭的区域,所以,如果被裁 剪多边形和裁剪窗口有交点,则交点成对出现。这些交点分成两类: 一类称“入”点,即被裁剪多边形由此点进入裁剪窗口,如图中a、c、e; 一类称“出”点,即被裁剪多边形由此点离开裁剪窗口,如图中b、d、f。 二、Weiler-Atherton任意多边形裁剪算法思想:

多边形裁剪

#python实现可视化的多边形裁剪 import matplotlib.pyplot as plt import copy import math from tkinter import * def cross_point(line1,line2,winx,winy):#计算交点函数 year1 = copy.deepcopy(line1) pop1 = copy.deepcopy(line2) winx1 = copy.deepcopy(winx) winy1 = copy.deepcopy(winy) node_class = [] minx = min(winx) maxx = max(winx) miny = min(winy) maxy = max(winy) count = 0 for i in range(len(line1)-1): count1=0 x1=line1[i]#取四点坐标 y1=line2[i] x2=line1[i+1] y2=line2[i+1] k1=(y2-y1)*1.0/(x2-x1)#计算k1,由于点均为整数,需要进行浮点数转化 b1=y1*1.0-x1*k1*1.0#整型转浮点型是关键 nodey = k1*minx*1.0+b1*1.0 if (y1<=nodey<=y2 or y2<=nodey<=y1) and (miny<=nodey<=maxy) and ([maxx,nodey] not in node_class): node_class.append([minx,nodey]) count=count+1 count1=count1+1 nodey1 = k1*maxx*1.0+b1*1.0 if (y1<=nodey1<=y2 or y2<=nodey1<=y1) and (miny<=nodey1<=maxy) and ([maxx,nodey1] not in node_class): node_class.append([maxx,nodey1]) count=count+1 count1=count1+1 nodex = (miny*0.1 - b1*0.1)/(k1*0.1)

计算机图形学 多边形裁剪与填充 计算机图形学课程设计

课程设计报告 课程名称计算机图形学 课题名称多边形裁剪与填充 专业计算机科学与技术 班级计算机0902 学号 姓名 指导教师刘长松曹燚 2012年10 月9 日

湖南工程学院 课程设计任务书 课程名称计算机图形学课题多边形裁剪与填充 专业班级计算机0902 学生姓名 学号 指导老师刘长松曹燚 审批 任务书下达日期2012年9月15 日 任务完成日期2012 年10月9 日

一、设计内容与设计要求 1.设计内容: 交互式地实现多边形的裁剪和填充。。 2.设计要求: 1)窗口功能设计。 2)实现鼠标画多边形与数据存储功能。 3)实现鼠标剪裁窗口选择功能。 4)实现多边形裁剪和填充功能。 3.算法提示: 多边形裁剪算法分析: 基本思想是一次用窗口的一条边裁剪多边形,窗口的一条边以及延长线构成裁剪线,该线把平面分成两个部分:可见一侧,不可见一侧。用一条裁剪边对多边形进行裁剪,得到一个顶点序列,作为下一条裁剪边处理过程的输入点。 对于每一条裁剪边,只是判断点在窗口的哪一测以及求线段与裁剪边的交点算法应随之改变。 多边形填充算法分析: 确定多边形所占有的最大扫描线数,得到多边形顶点的最小和最大y值(ymin 和ymax),从y=ymin 到 y=ymax, 每次用一条扫描进行填充。对一条扫描线填充的过程可分为四个步骤: a.求交b.排序c.交点配对d.区间填色。 二、进度安排 第 3 周星期一8:00——12:00 星期二8:00——12:00 星期三8:00——12:00 星期四8:00——12:00 星期五8:00——12:00 第 4 周星期一8:00——12:00 附: 课程设计报告装订顺序:封面、任务书、目录、正文、附件(A4大小的图纸及程序清单)、评分。正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。 正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。 正文总字数要求在5000字以上(不含程序原代码)。

计算机图形学-实验五 直线和多边形的裁剪

大学实验报告 学院:计算机科学与信息学院专业:软件工程班级:102班 学号实验组实验时间指导教师成绩实验项目名称实验五直线和多边形的裁剪 实 验 目 的 掌握直线段的裁剪算法以及多边形的裁剪算法 实 验要求熟练掌握直线段的裁剪算法以及多边形的裁剪算法的基本原理,并编写测试代码进行实验。 实验原理 Cohen-Sutherland直线剪裁算法 以区域编码为基础,将窗口及其周围的,8个方向以4 bit的二进制数进行编码。 右图所示的编码方法将窗口及其邻域 分为5个区域: ⑴域:区域(0000)。 ⑵上域:区域(1001, 1000, 1010)。 ⑶下域:区域(0101, 0100, 0110)。 ⑷左域:区域(1001, 0001, 0101)。 ⑸右域:区域(1010, 0010, 0110)。 当线段的两个端点的编码的逻辑“与”非零时,线段为显然不可见的,对某线段的两个端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右; Cohen-Sutherland直线剪裁算法的算法思想是: 对于每条线段P1P2分为三种情况处理。(1)若P1P2完全在窗口,则显示该线段P1P2简称“取”之。(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。其中

while (code1 != 0 || code2 != 0) { if ((code1 & code2) != 0) {// 两端点的编码相与不为0,表示直线在窗口外 return; } if (code1 != 0) { code = code1; } else { code = code2; } if ((LEFT & code) != 0) {// 直线的端点与矩形窗口的左边编码相与!=0 x = XL; y = y1 + (y2 - y1) * (XL - x1) / (x2 - x1);// 求直线与矩形窗口的左边界的交点 } else if ((RIGHT & code) != 0) {// 直线的端点与矩形窗口的右边编码相与!=0 x = XR; y = y1 + (y2 - y1) * (XR - x1) / (x2 - x1);// 求直线与矩形窗口的右边界的交点 } else if ((BOTTOM & code) != 0) {// 直线的端点与矩形窗口的下边编码相与!=0 y = YB; x = x1 + (x2 - x1) * (YB - y1) / (y2 - y1);// 求直线与矩形窗口的下边界的交点 } else if ((TOP & code) != 0) {// 直线的端点与矩形窗口的上边编码相与!=0 y = YT; x = x1 + (x2 - x1) * (YT - y1) / (y2 - y1);// 直线的端点与矩形窗口的

计算机图形学(简单多边形裁剪算法)

简单多边形裁剪算法 摘要:多边形裁剪算法与线性裁剪算法具有更广泛的实用意义,因此它是目前 裁剪研究的主要课题。本文主要介绍了一种基于多边形顶点遍历的简单多边形裁剪算法,它有效降低了任意多边形裁剪复杂度。通过记录交点及其前驱、后继信息,生成结果多边形,该算法简化了交点的数据结构,节省了存储空间,降低了算法的时间复杂度,具有简单、易于编程实现、运行效率高的特点。 关键词:多边形裁剪;交点;前驱;后继;矢量数组 一、技术主题的基本原理 简单多边形裁剪算法综合考虑现有多边形裁剪算法的优缺点,它是一种基于多边形顶点遍历来实现简单多边形裁剪工作的。其主要的原理是遍历多边形并把多边形分解为边界的线段逐段进行裁剪,输出结果多边形。 二、发展研究现状 近年来,随着遥感绘图、CAD辅助设计、图象识别处理技术的发展,图形裁剪算法从最初在二维平面上线和图形的裁剪扩展到三维空间里体和场的裁剪,国内外相继提出不少行之有效的算法,但越来越复杂的图形和计算也对算法的速度和适用性提出了越来越高的要求。因此,不断简化算法的实现过程,完善细节处理,满足大量任意多边形的裁剪也就成了当今算法研究的焦点之一。 以往多边形裁剪算法不是要求剪裁多边形是矩形,就是必须判断多边形顶点的顺时针和逆时针性,即存在不实用或者是增加了多边形裁剪算法的难度。为了解决现在的问题,我们研究现在的新多边形算法,其中,裁剪多边形和被裁剪多边形都可以是一般多边形,且不需要规定多边形输入方向。它采用矢量数组结构,只需遍历剪裁多边形和被裁剪多边形顶点即完成多边形的裁剪,具有算法简单、运行效率高的特点。 三、新算法设计 1、算法的思想 本算法是为了尽量降低任意多边形裁剪算法复杂度而提出的,其主要思想是采用矢量数组结构来遍历裁剪多边形和被裁多边形顶点,记录裁剪多边形和被裁减多边形交点及其前驱、后继信息,并通过记录相邻交点的线段,然后通过射线法选择满足条件的线段,之后进行线段连接,输出对应的裁剪结果。算法数据结构简单,即没有用常用的数据结构,如线性链表结构、双向链表结构和树形结构,这样就节省了存储空间,增加算法的效率。 2、主要数据结构 多边形裁剪算法的核心是数据结构,它决定了算法的复杂度和计算效率。兼顾数据结构简单和节省存储空间的目的,简单多边形裁剪算法是基于矢量数组vector的数据结构进行裁剪的,多边形矢量数组的每个元素表示多边形顶点,且按顶点输入的顺序存储。裁剪多边形和被裁剪多边以下我们分别用S和C表示,

PS移动 多边形 裁剪工具

PS二:移动、多边形、裁剪工具 前言:如果小工具后面带有小三角样式,即说明该种工具还有其他类似的小工具可以使用,方式是鼠标左键长按小工具图标,会自动跳出其他几个小工具,点击选择即可。 1:移动工具(v):点击图层后可以选中图层进行编辑或移动图层至需要的位置。 先建立一个空白图层,大小像素任意。 打开一个文件夹,找任意图片,按住鼠标左键选中并拖动图片拉到PS图层界面中。拉动过程中鼠标不要松开。 此时右边图层面板就会出现两个图层(如果没有图层面板,可以在PS软件最上面的第一排菜单栏中点击“窗口”-“图层”,快捷键F7)。一开始新建的是背景层,另外一个是刚才拖进去的图片图层。

然后在这个状态下,可以使用“移动工具”随意拖动该图层,也可以对齐进行其他编辑(在编辑前必须先在图层上右键-栅格化图层,再进行编辑。以后将仔细介绍图层的编辑。)。 2:多边形套索工具:可以根据自己的意图来裁剪或选择图层上某个部分。 用上面的移动工具拖入一个需要修改的图层,这边就按刚才的图片举例,如果图片上的微信号换掉了,就需要把微信号删除掉,在PS里说裁剪掉。栅格化图层后,先点击多边形套索工具,然后在微信号的边缘依次点击鼠标左边选出需要裁切掉的地方。

点击第一点后,会出现一条直线,可以点击第二点,一直到收尾相连,这时的选框已经选出来。直接按键盘“Delete”键即可。 删除后图层上会出现一个虚线选框,按快捷键ctrl+d 取消选框即可。然后可以编辑自己需要的内容。 3:裁剪工具(C):是裁剪画布大小的工具,就如同剪刀一样。裁剪掉的东西是不能再拼回去的哦。(原则上不可以,但是PS功能非常强大,以后会告诉大家如果来拼回去,嘻嘻...)点击“裁剪工具”后,画布四周会出现虚线框和八个小框。

多边形裁剪的Sutherland―Hodgman算法(计算机图形学)

多边形裁剪的Sutherland—Hodgman算法 1>. Sutherland—Hodgman多边形裁剪算法思想 该算法的基本思想是每次用窗口的一条边界及其延长线来裁剪多边形的各边。多边形通常由它的顶点序列来表示,经过裁剪规则针对某条边界裁剪后,结果形成新的顶点序列,又留待下条边界进行裁剪,…,直到窗口的所有边界都裁剪完毕,算法形成最后的顶点序列,才是结果多边形(它可能构成一个或多个多边形)。 当多边形一个顶点Pi相对于窗口某条边界及其延长线进行剪裁时,不外乎下列四种情况(即裁剪规则): 1、顶点Pi在内侧,前一顶点Pi-1也在内侧,则将Pi纳入新的顶点序列; 2、顶点Pi在内侧,前一顶点Pi-1在外侧,则先求交点Q,再将Q、Pi依次纳入新的顶点序列; 3、顶点Pi在外侧,前一顶点Pi-1在内侧,则先求交点Q,再将Q纳入新的顶点序列; 4、顶点Pi与前一顶点Pi-1均在外侧,则顶点序列中不增加新的顶点。 2>. Sutherland—Hodgman多边形裁剪算法步骤 考虑多边形相对于一条边界及其延长线进行裁剪的算法: 1.从主函数得到待裁剪多边形的顶点序列P[][2]、顶点序列数n、窗口一条边界参数xl(假如为矩形窗口的左边界); 2.赋初值: 将顶点序列中的最后一个顶点赋给前一顶点S; 设置初始标志flag: if(S在边界内侧)flag=0;

else flag=1; 设新的顶点序列数j=0; 3.对多边形各顶点进行裁剪规则处理,结果放入新的多边形顶点序列 Q[][2]中: for(对第一个顶点直到最后一个顶点,逐一处理){if(Pi在边界内 侧){if(flag!=0){flag=0; 求交点并放入新的多边形顶点序列Qjxx; j++;}将当前顶点放入新的多边形顶点序列Qj中: Qj=Pi; j++;}else{if(flag==0){flag=1; 求交点并放入新的多边形顶点序列Qjxx; j++;}} 将当前顶点赋给S: S=Pi;} 4.做返回准备: 将新的多边形顶点序列Q又逐一放回原多边形顶点序列P中: P=Q; 将新的多边形顶点数j放回原多边形顶点数n中: n=j; //////////////////////////////////////////////////////////////////////////////////// // //-----多边形裁剪的Sutherland—Hodgman算法---------//

多边形裁剪报告

多边形裁剪实验报告 一、实验内容 1.实验目的: ●理解多边形裁剪算法的基本思想,掌握多边形裁剪算法及其特 点。 ●能够应用多边形裁剪算法,编程实现裁剪指定多边形的功能。 2.常见的解决方法以及各方法的优点: a)Sutherland-Hodgman(逐边)裁剪算法 优点:原理简单实用。 缺点:对于凸多边形的裁剪将显示出一条多余的裁剪边界直线。这种情况在裁剪后的多边形有两个或多个分离部分的时候出现,因为只有一个输出顶点表,所以表中的最后一个顶点总是连着第一个顶点。 二、试验方法 1.Sutherland-Hodgman裁剪算法所用方法的原理 采用分割处理策略,将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪。顺序是左上右下,前边的结果永远是后边的输入。一次用窗口的一条边裁剪多边形,考虑窗口的一条边以

及其延长线构成的裁剪线,该线把平面分为两个部分:可见一侧和不可见一侧。对于两个端点均在可见一侧,则输出一个端点;对于两个端点均在不可见一侧,则输出0个端点;如果起始端点在可见一侧,终止端点在不可见一侧,则输出线段与裁剪边的交点;如果起始端点在不可见一侧,终止端点在可见一侧,则输出线段与裁剪边的交点以及终止端点。 程序设计思路 (1)输入第一个顶点S,输入第一个顶点F (2)判断定点是否输入完毕,如果输入完毕,F—>P,处理线段SP (3)如果顶点未输入完毕,则输入顶点P,处理线段SP,P->S,然后再 判断顶点是否输入完毕,转到第二步 (4)处理线段SP,判断SP是否与裁剪线相交,如果与裁剪线相交, 则求出SP与裁剪线的交点 (5)输出交点 (6)如果SP与裁剪线不相交,则判断P是否位于可见一侧,如果P 位于可见一侧,则输出顶点P (7)如果P位于不可见一侧,则直接舍弃P (8)线段SP处理完毕,算法结束。

多边形裁剪算法

多边形裁剪的 Sutherland — Hodgman 算法 1>. Sutherland — Hodgman 多边形裁剪算法思想 该算法的基本思想是每次用窗口的一条边界及其延长线来裁剪多边形的各边。 多边形通常由 它的顶点序列来表示, 经过裁剪规则针对某条边界裁剪后, 结果形成新的顶点序列, 又留待 下条边界进行裁剪,…,直到窗口的所有边界都裁剪完毕,算法形成最后的顶点序列, 才是 结果多边形(它可能构成一个或多个多边形) 当多边形一个顶点 裁剪规则): 1 、顶点 2、 顶点 列; 3、 顶点 4、 顶点 Pi 在内侧, Pi 在内 侧, O Pi 相对于窗口某条边界及其延长线进行剪裁时, 不外乎下列四种情况 (即 前一顶点 前一顶点 前一顶点 Pi-1 也在内侧,则将 Pi 纳入新的顶点序列; Pi-1在外侧,则先求交点 Q ,再将Q 、Pi 依次纳入新的顶点序 Pi 在外侧, Pi 与前一顶点 Pi-1 均在外侧,则顶点序列中不增加新的顶点。 Pi-1在内侧,则先求交点 Q ,再将Q 纳入新的顶点序列; 2>. Sutherland — Hodgman 多边形裁剪算法步骤 考虑多边形相对于一条边界及其延长线进行裁剪的算法: 1.从主函数得到待裁剪多边形的顶点序列 P[][2]、顶点序列数n 、窗口一条边界参数 xl (假 如为矩形窗口的左边界) ; 2.赋初值:将顶点序列中的最后一个顶点赋给前一顶点 设置初始标志 flag : if (S 在边界内侧 )flag=0; else flag=1 ; 设新的顶点序列数 j=0; 3.对多边形各顶点进行裁剪规则处理,结果放入新的多边形顶点序列 for (对第一个顶点直到最后一个顶点, { if (Pi 在边界内侧 ) { if (flag!=0) { flag=0; 求交点并放入新的多边形顶点序列 逐一处理) Qj 中; S ; Q[][2] 中: j++; } 将当前顶点放入新的多边形顶点序列 Qj 中: Qj=Pi ; j++; } else { if (flag==0) { flag=1; 求交点并放入新的多边形顶点序列 Qj 中; j++ }

多边形裁剪算法

多边形裁剪 刘运达【油源恒业北京 2003】 摘要:多边形裁剪与线剪裁相比具有更广泛的实用意义,因此它是目前裁剪研究的主要课题.提出了一个多边形裁剪多边形的有效算法.其中的多边形都可以是一般多边形,也可以是凹多边形。该算法使用单线性链表数据结构,与其他使用双链表或树结构的算法相比,占用的空间小特点。其次,找到了两个多边形之间进、出点之间的关系.再通过合理的数据结构处理,减少了算法对多边形链表的遍历次数,而且允许多边形既可以按顺时针方向也可以按逆时针方向输入.最后,判断和计算交点是裁剪算法的主要工作.提出了一个具有最少计算量的交点判断和计算方法。结果表明,新算法具有最简单的结构。 关键词: 计算机图形学;凹多边形;多边形剪裁;交点计算;单链表结构 1.引言 在图形系统中,二维裁剪是最为基础、最为常用的操作之一.其典型的应用是在图形的消隐处理等处理求交操作之中.对裁剪算法的研究主要集中在裁剪直线和裁剪多边形两方面.在实用中,多边形裁剪与线剪裁相比具有更高的使用率,因此它是目前裁剪研究的主要课题.多边形裁剪用于裁剪掉被裁剪多边形(又称为实体多边形)位于窗口(又称为裁剪多边形)之外的部分.多边形愈复杂,其裁剪算法就愈难以实现.现有的解决方案或者局限于某一类多边形,或者结构复杂、时间消耗大. 本文提出了一个新的多边形裁剪多边形的有效算法.其中的裁剪多边形和被裁剪多边形都可以是一般多边形,也可以是凹多边形.该算法只使用单线性链表数据结构,所以具有数据结构简单、占用空间少的特点,而且无须事先规定以什么方向输入图形的顶点.另外,该算法使用了一个新的具有最少计算量的交点判断和计算方法,进一步加快了算法的运行速度.算法最终通过简单的遍历线性链表,可以得到每一个输出多边形. 2.基本概念与定义 为了便于下面对算法的讲解,本节首先介绍有关多边形裁剪的一些基本概念及术语. (1) 多边形的边的方向与内外区域的关系. 如果多边形的边的方向是顺时针的(即多边形的顶点是以顺时针的顺序输入的),则在沿着多边形的边走时,右侧区域为多边形的内部;相反,如果多边形的边的方向是逆时针的,则在沿着多边形的边走时,左侧区域为多边形的内部. (2) 进点和出点的定义. 设I是多边形S和C的一个交点,如果S沿着C的边界的方向在I点从C的外部进入C的内部,则称I为对于C的一个进点.反之,如果S在I点从C的内部出到C的外部,则称I为对于C的一个出点. 例如,对于如图1所示的多边形C和S及其交点I,若S的方向为逆时针方向S 1→S 2 →S 3 →S 4 →S 5 , 则I 5I 1 I 3 是对于C的进点,I 4 I 2 I 6 是对于C的出点.如果S的方向为顺时针方向S 5 →S 4 →S 3 →S 2 →S 1 ,则 对于C来说,I 2I 4 I 6 是进点,I 1 I 5 I 3 是出点. (3) 进点和出点的判定.

多边形裁剪

《计算机图形学实验》报告 任课教师:钱文华 2016年春季学期 实验:多边形裁剪 实验时间:2016年11月10日 实验地点:信息学院2204

实验目的:掌握多边形裁剪 程序代码: #include #include #include class wcPt2D{ public: GLfloat x,y; }; typedef enum { Left,Right,Bottom,Top }Boundary; int Inside(wcPt2D p,Boundary b,wcPt2D wMin,wcPt2D wMax) { switch(b) { case Left:

if(p.xwMax.x) return (false); break; case Bottom: if(p.ywMax.y) return (false); break; } return true; } int Cross(wcPt2D p1,wcPt2D p2,Boundary b,wcPt2D wMin,wcPt2D wMax) { if(Inside(p1,b,wMin,wMax)==Inside(p2,b,wMin,wMax)) return (false); else return true;

} wcPt2D Intersect(wcPt2D p1,wcPt2D p2,Boundary b,wcPt2D wMin,wcPt2D wMax) { wcPt2D iPt; float m; if(p1.x !=p2.x) m=(p2.y-p1.y)/(p2.x-p1.x); switch(b){ case Left: iPt.x=wMin.x; iPt.y=p2.y+(wMin.x-p2.x)*m; break; case Right: iPt.x=wMax.x; iPt.y=p2.y+(wMax.x-p2.x)*m; break; case Bottom: iPt.y=wMin.y; if(p1.x!=p2.x)iPt.x=p2.x + (wMin.y-p2.y)/m; else iPt.x=p2.x; break;

计算机毕业论文_一个有效的多边形裁剪算法

一个有效的多边形裁剪算法 摘要:多边形多裁剪与线剪裁相比具有更广泛的实用意义,因此它是目前裁剪 研究的主要课题.提出了一个多边形裁剪多边形的有效算法.其中的多边形都可以是一般多边形,既可以是凹多边形,也可以是有内孔的多边形.该算法不仅可以求多边形的“交”(多边形裁剪),而且可以求多边形的“并”和“差”.它是以所提出的一系列新方法和新技术为基础而形成的.首先,该算法使用单线性链表数据结构,与其他使用双链表或树结构的算法相比,具有占用空间少及处理速度快的特点;其次,找到了两个多边形之间进、出点之间的关系.再通过合理的数据结构处理,减少了算法对多边形链表的遍历次数,而且允许多边形既可以按顺时针方向也可以按逆时针方向输入.最后,判断和计算交点是裁剪算法的主要工作.提出了一个具有最少计算量的交点判断和计算方法,进一步加快了算法的运行速度.与其他同类算法进行了比较,结果表明,新算法具有最简单的结构和最快的执行速度. 正文: 1.基本概念与定义. 为了便于下面对算法的讲解,本节首先介绍有关多边形裁剪的一些基本概念及术语. (1) 多边形的边的方向与内外区域的关系. 如果多边形的边的方向是顺时针的(即多边形的顶点是以顺时针的顺序输入的),则在沿着多边形的边走时,右侧区域为多边形的内部;相反,如果多边形的边的方向是逆时针的,则在沿着多边形的边走时,左侧区域为多边形的内部.对于具有孔洞的多边形,只要把内孔边界和外边界以相反的方向表示,由上面的规则判断多边形的内部仍然适用. (2) 进点和出点的定义. 设I是多边形S和C的一个交点,如果S沿着S的边界的方向在I点从C的外部进入C的内部,则称I为对于C的一个进点.反之,如果S在I点从C的内部出到C的外部,则称I为对于C的一个出点. 例如,对于如图1所示的多边形C和S及其交点I,若S的方向为逆时针方向 S 1→S 2 →S 3 →S 4 →S 5 ,则I 5 I 1 I 3 是对于C的进点,I 4 I 2 I 6 是对于C的出点.如果S的方向为 顺时针方向S 5→S 4 →S 3 →S 2 →S 1 ,则对于C来说,I 2 I 4 I 6 是进点,I 1 I 5 I 3 是出点 (3) 进点和出点的判定. 假设多边形S的一条边S i S i+1 与另一多边形C有交点.当点S i 是C的外点时,则沿 着S的走向,边S i S i+1 与C的第一个交点I必是C的进点;而当S i 是C的内点时,I必是C 的出点.由于沿着S的边界对于C的进点和出点是交替出现的(两多边形的边重合或者两多边形在顶点处相交的情况除外.这类特殊情况的处理将在第5节进行讨

实验报告5 多边形裁剪与填充要点

《计算机图形学》实验5实验报告 实验题目:多边形裁剪与填充 实验内容:1 阅读理解提供的参考资料。 2编写并调通一个多边形裁剪的java程序。 3编写并调通一个多边形填充的java程序。 参考资料:1fillPolygon.java 2 clipSC2.java 3变换与剪裁.ppt 4多边形的填充.ppt 基本概念: 1变换与裁剪: (1)计算机处理图形的过程一般分为三个阶段:①图形的数字化;②图形操作;③图形输出。 (2)模型坐标系(局部坐标系):当构造单个对象的数字模型时,为了方便,可以将其置一个特定的坐标系下,即模型坐标系或局部坐标系。 (3)世界坐标系:为描述图形场景中所有图形之间的空间关系,将它们置于一个统一的坐标系中,该坐标系被称为世界坐标系。 (4)设备坐标系:要输出经过处理后的数字化图形,需要在输出设备上建立一个坐标系,称为设备坐标系。 (5)标准化设备坐标系:有些图形系统,对设备坐标系进行了规范化,将坐标范围限定在区间 {x,y,z | 0≤x≤1, 0≤y≤1, 0≤z≤1} 内,称标准化设备坐标系。 (6)三维图形的显示流程图 (7)裁剪 裁剪作用:选择显示的内容--图形在窗口内的部分被显示出来,窗口外的部分被裁剪掉。图形中每个基本元素都要经过裁剪,因此裁剪直接影响整个图形系统的效率。 裁剪类型:二维裁剪、三维裁剪 裁剪窗口:矩形,凸多边形,任意多边形 视见体:棱台、立方体 裁剪对象:直线段、多边形、文字等 2多边形的填充: (1)多边形的填充指在给定区域填上所需要的颜色,就是把多边形的顶点表示转换为点阵表示,即从多边形的给定边界出发,求出位于其内部的各个像素,并将帧缓冲器内的各个对应元素设置相应的灰度或颜色。 (2)多边形的表示: 1)顶点表示是用多边形的顶点的序列来描述多边形,该表示几何意义强、占内存少,但它

裁剪――多边形面积的运用

裁剪――多边形面积的运用 裁剪――多边形面积的运用 四川省自贡市自流井区塘坎上小学苏梅 教学内容:西师版教材五年级上册,多边形面积的运用。 教学目标: 1、让学生理解长方形里能剪几个相同的小正方形、小长方形、小三角形这类题的计算方法 2、让学生经历摆一摆、剪一剪的过程,探索、掌握此类题的解题方法 3、培养学生小组合作学习的能力 4、培养学生的动手操作能力和空间想象能力 学具准备:小正方体,大长方形卡纸、小正方形、小长方形、小三角形 课前分小组:4人一组; 了解学情:1、学生对长、正方形,三角形的面积是否会算, 2、在解决此类问题时,能否出现两种算法,第一种:用大图形面积除以小图形面积,第二种:用每排个数*排数 3、小组合作学习的情况,了解每组擅长表达的孩子,找好发言人 教学过程: 课前活动:搭积木 至少用几个这样的积木(正方体),可以搭成一个大正方体? 生答。可能会出现4个,或8个两种答案。 小组合作,拿出小正方体,摆一摆,验证答案。并汇报。 有时候我们靠想象不能判断出答案是否正确时,可以用身边的实物动手摆一摆,把抽象变成直观,在摆的过程中也许正确答案就出来了。 (引导学生大胆表达,说得好的用掌声鼓励) 一、谈话引入,前面学了多边形面积的计算,今天我们就用多边形面积解决实际问题。板书课题。 二、新授课 (一)活动一:(刚好摆完,没有剩余) 一张长18厘米,宽12厘米的长方形卡纸,可以剪多少个边长是6厘米的小

正方形? 小声读题,找出关键词,理解题意。 请学生说做法,可能出现两种,如果没有出现摆一摆的方法,“如果给你们这样的长方形、小正方形,能不能用摆一摆的方法来验证结果是否正确” 下面小组合作,讨论做法 活动要求: 请组长拿出准备卡纸,开始吧。 汇报,找出不同算法,老师板书算式, 法一:大面积/小面积法二、摆一摆(画出示意图) 18*12=216(平方厘米)每排个数18/6=3(个) 6*6=36(平方厘米)排数12/6=2(排) 216/ 36=6(个)总个数3*2=6(个)可能会出现以下错误:216/6=36(个)用的边长 或6*4=24(厘米)216/24=9(个)用的周长 教师引导学生进行错误辨析 引导得出两种,方法大面积/小面积, 提炼出以下词语,摆一摆,每排个数,排数,总个数 (二)活动二:(没有摆完,有剩余) 一张长18厘米,宽16厘米的长方形卡纸,可以剪多少个边长是6厘米的小正方形? 活动要求:小组合作 A方案先列式,再动手摆一摆验证答案。 B方案先摆一摆,再列式计算 A、B方案任选一种 请一个小组读活动要求。 请拿出准备的卡纸,各小组选择喜欢的方案,开始吧。 法一出现错误,18*16=288(平方厘米) 6*6=36(平方厘米) 288/36=8(个)

相关文档
相关文档 最新文档