计算机图形学有序边表作业,《计算机图形学》有序边表填充算法.docx

实验报告

实验目的

1、掌握有序边表算法填充多边形区域;

2、理解多边形填充算法的意义;

3、增强C语言编程能力。

算法原理介绍

根据多边形内部点的连续性知:一条扫描线与多边形的交点中,入点和出点之间所 有点都是多边形的内部点。所以,对所有的扫描线填充入点到出点之间所有的点就可填 充多边形。

判断扫描线上的点是否在多边形之内,对于一条扫描线,多边形的扫描转换过程可 以分为四个步骤:

(1)求交:计算扫描线与多边形各边的交点;

(2)排序:把所有交点按x值递增顺序排序;

(3)配对:第一个与第二个,第三个与第四个等等;每对交点代表扫描线与多边 形的一个相交区间;

(4)着色:把相交区间内的象素置成多边形颜色,把相交区间外的象素置成背景 色。

p1,p3,p4,p5属于局部极值点,要把他们两次存入交点表中。如扫描线y=7上的交

点中,有交点(2,7,13),按常规方法填充不正确,而要把顶点(7,7)两次存入交点表中 (2,7,7,13)。p2, p6为非极值点,则不用如上处理。

为了提高效率,在处理一条扫描线时,仅对与它相交的多边形的边进行求交运算。 把与当前扫描线相交的边称为活性边,并把它们按与扫描线交点x坐标递增的顺序存放 在一个链表中,称此链表为活性边表(AET)。

对每一条扫描线都建立一个与它相交的多边形的活性边表(AET。每个AET的一

个节点代表一条活性边,它包含三项内容

x -当前扫描线与这条边交点的x坐标;

△ x -该边与当前扫描线交点到下一条扫描线交点的x增量;

ymax -该边最高顶点相交的扫描线号。

每条扫描线的活性边表中的活性边节点按照各活性边与扫描线交点的x值递增排序

连接在一起。

当扫描线y移动到下一条扫描线y = y+1时,活性边表需要更新,即删去不与新扫 描线相交的多边形边,同时增加与新扫描线相交的多边形边,并根据增量法重新计 算扫描线与各边的交点x。

当多边形新边表ET构成后,按下列步骤进行:

对每一条扫描线i,初始化ET表的表头指针ET[i];

将ymax = i的边放入ET[i]中;

使y=多边形最低的扫描线号;

初始化活性边表AET为空;

循环,直到AET和ET为空。

将新边表ET中对应y值的新边节点插入到AET表。

遍历AET表,将两两配对的交点之间填充给定颜色值。

遍历AET表,将ymax= y的边节点从AET表中删除,并将ymax> y的各边节点 的x值递增△ x;并重新排序。

y增加1。

三、程序源代码

#in elude "graphics.h"

#defi ne WINDOW_HEIGHT 480

#define NULL 0

#i nclude "alloc.h"

#i nclude "stdio.h"

#i nclude "dos.h"

#i nclude "con io.h"

typedefstruct tEdge/*typedef是将结构定义成数据类型*/

{ int ymax;/*边所交的最高扫描线号*/

float x;/*当前扫描线与边的交点的x值*/

float dx;/*从当前扫描线到下一条扫描线之间的 x增量*/

struct tEdge *n ext;

}Edge;

typedef struct poi nt{int x,y;}POINT;/*将结点插入边表的主体函数

typedef struct poi nt{int x,y;}POINT;

/*将结点插入边表的主体函数*/

void In sertEdge(Edge *list,Edge *edge)/* {

Edge *p,*q=list;

p=q->n ext;/*

while(p!=NULL)/*

{

if(edge->xx) /* p=NULL;

else/*

{q=p; p=p->n ext;

}

}

edge->n ext=q->n ext; q->n ext=edge;

}

活性边edge插入活性边表list中*/

记住q原来所指之结点*/ 按x值非递减顺序增加边表*/ 要插入的边的x较大不应该在当前插入*/

要插入的边的x较小应该在当前插入*/

/* 使欲插入之结点edge指向q原来所指之结点*/

/*使q指向插入之结点*/

int yNext(int k,int cnt,POINT *pts)

/*对于多边形中的某个顶点序号k(0,1...6),返回下一顶点的纵坐标,如果这2 个顶点所在边是 水平的,则顺延,即返回第(k+2)个顶点的纵坐标),cnt是顶点个数 +1,pts指向多边形顶点结构体的指针*/

{

int j;

if((k+1)>(cnt-1))/*当前顶点为最后一个顶点,则下一个顶点为第0个顶点*/

j=0;

e

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

疫情防控“漫入调查系统”上线 SENSORO 助力提升筛查效率及精准度

连日来,国内多地报告新增病例,加上因春节临近导致的人员流动和聚集增加,基层防疫面临着比平时更大的挑战。为快速、高效地解决大规模漫入信息筛查任务,缓解一线疫情防控压力,SENSORO(北京升哲科技有限公司&…

程序媛如何自我突破?

简介: 很多时候人们是被自己内心的偏见所打败的。作为一名程序媛,保持一种对世界、对人生的不同看法,可以帮助我们树立自己的参照系,不被外部轻易左右。或许我们无法像一些伟人那样打破、推动如此重大的社会认知,但是我…

r包调用legend函数_R语言实现基于朴素贝叶斯构造分类模型数据可视化

本文内容原创,未经作者许可禁止转载!目录一、前言 二、摘要 三、关键词 四、算法原理 五、经典应用 六、R建模 1、载入相关包(内含彩蛋): 1.1 library包载入 1.2 pacman包载入(彩蛋) 2、读入数据: 3、可视化: 一、前言…

如何基于Dataphin实现敏感数据保护

简介: 在企业的发展过程中,如果不重视敏感数据的保护,和数据安全体系的建设,那么一旦发生了敏感数据泄漏事件,轻则企业口碑受损,业务受影响;重则会直接触法律,受到主管部门的处罚和制…

百度研究院发布2022科技趋势预测:大模型实用化、AI助力深空探测成热门

1月25日,百度研究院发布2022年科技趋势预测,这是其连续第三年发布对前沿科技趋势的展望。 今年上榜的科技趋势预测涵盖了AI核心技术、交叉学科与跨领域研究,以及AI的产业及社会价值三个层面,包括预训练大模型、AI for Science&am…

计算机操作员技术特长,计算机及应用专业自我鉴定(通用5篇)

计算机及应用专业自我鉴定(通用5篇)自我鉴定是个人在一个阶段的自我总结,自我鉴定可以总结出具体的经验,因此我们是时候写一份自我鉴定了。自我鉴定一般是怎么写的呢?以下是小编收集整理的计算机及应用专业自我鉴定(通用5篇),仅供…

5 款阿里常用代码检测工具,免费用!

简介: 5 款阿里常用代码检测工具免费体验,仅需 2 步,Cherry键盘、公仔抱回家,100%拿奖! 作者 | 喻阳 面临问题 在日常研发过程中,我们通常面临的代码资产问题主要分为两大类:代码质量问题和代…

查看topic信息_如何规划的你博客文章主题(Topic)

产品有了, 写手有了。该写哪些主题,就成问题了。这篇文章,会结合真实案例,告诉大家,该如何规划自己的博客主题。(注意这里不是标题)。以我最近的一个项目, 游泳池产品为例。关键词叫…

DataWorks功能实践速览 — 参数透传

简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 往期回顾: DataWorks 功能实践速览01期——数据同步解决方案:为您介绍不同场景下可选的数据同步方案。DataWorks 功能…

GPU还是IPU?IPU 芯片厂商 Graphcore 的 2021

作者 | 宋慧 出品 | CSDN 云计算&AI 科技大本营 AI 人工智能毋庸置疑是目前最火的 IT 技术领域之一,而主攻图形计算的 NVIDIA GPU(图形处理器)又是现今 AI 领域的当红炸子鸡。不过 AI 芯片领域又迎来了新的挑战者,2016 年创立…

云原生大数据架构中实时计算维表和结果表的选型实践

简介: 随着互联网技术的日渐发展、数据规模的扩大与复杂的需求场景的产生,传统的大数据架构无法承载。 作者 | 志羽 来源 | 阿里技术公众号 一 前言 传统的大数据技术起源于 Google 三架马车 GFS、MapReduce、Bigtable,以及其衍生的开源分布…

冬奥开幕在即,现场通信网络技术深度揭秘!

作者 | 小枣君来源 | 鲜枣课堂还有9天,举世瞩目的北京冬奥会就将拉开大幕。本次冬奥会,是继2008年之后,中国再一次承办这种世界最顶级体育盛会。这两年全球疫情肆虐,抗疫形势波折多变。北京冬奥能够如期举办,意义极为重…

Flink 在 58 同城的应用与实践

简介: 58 同城的实时 SQL 建设以及如何从 Storm 迁移至 Flink。 本文整理自 58 同城实时计算平台负责人冯海涛在 Flink Forward Asia 2020 分享的议题《Flink 在 58 同城应用与实践》,内容包括: 实时计算平台架构实时 SQL 建设Storm 迁移 Fli…

vue解构赋值_前端开发es6知识 模块化、解构赋值、字符串模板

项目开发中一些常用的es6知识,主要是为以后分享小程序开发、nodekoa项目开发以及vueSSR(vue服务端渲染)做个前置铺垫。项目开发常用es6介绍1、块级作用域 let const2、箭头函数及this指向3、promise、asnyc await语法4、模块化 module export和import5、解构赋值、字…

当云原生遇到混合云:如何实现“求变”与“求稳”的平衡

简介: 多年来,随着云计算技术的蓬勃发展和落地,越来越多的企业选择采用云计算技术来帮助自己快速完成业务数字化转型,以便能更好地适应市场变化,进而赢得更大的市场空间。 作者|郝树伟 Flexera 的《RightScale2021 云…

之前写的 JSX 的条件语句竟然存在那么多 Bug?

作者 | 零一来源 | 前端印象今天的主题是&#xff1a;关于 JSX 的条件语句&#xff0c;你不知道3件事一、&&隐藏大坑在 JSX 里写条件语句&#xff0c;&& 应该是用的最多的了&#xff0c;例如&#xff1a;function Demo () {// ...省略一些代码return (<div&…

如何高效学习 Kubernetes 知识图谱?

简介&#xff1a; Kubernetes 知识图谱遵循云原生人才学习路径搭建课程体系框架&#xff0c;及人才发展路线设置不同阶段&#xff0c;由浅入深&#xff0c;帮助云原生人才学习容器基础、Kuternetes 网络、存储、资源对象、服务发现、应用编排与管理等 Kubernetes 完整技术栈内容…

中科院信工所经验_2021中科院信息工程研究所电子信息专业考研经验指导分享...

一、在计算机如此火热的今天&#xff0c;为什么选择要读研&#xff1f;我是一个乐观主义者&#xff0c;上大学以来我一直庆幸自己在高考结束填志愿的时候选择了计算机专业&#xff0c;更庆幸报考了湖南大学信息科学与工程学院&#xff0c;高考仅仅一分的优势把我送到了最美的学…

极验创始人吴渊:恶意流量威胁新趋势,揭秘网络黑产3大核心本质

记者 | 邓晓娟出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;天下没有免费的午餐&#xff0c;更没有免费的流量。以电商为例&#xff0c;最疯狂的时候&#xff0c;某电商平台单个获客成本接近400元。作为互联网的稀缺资源&#xff0c;流量的成本不断冲击着…

如何将一棵LSM-Tree塞进NVM

简介&#xff1a; 随着非易失内存产品的商业化推广&#xff0c;我们对于其在云原生数据库中大规模推广的潜力越来越有兴趣。X-Engine是阿里云数据库产品事业部PolarDB新型存储引擎团队研发的一个LSM-tree存储引擎&#xff0c;目前在阿里云PolarDB产品上提供对外服务。我们以X-E…