计算机图形学有序边表作业,《计算机图形学》有序边表填充算法.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
總結
以上是生活随笔為你收集整理的计算机图形学有序边表作业,《计算机图形学》有序边表填充算法.docx的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生产砂浆及腻子粉所使用的改性剂(胶状)是
- 下一篇: 二手车智汇已经被绑定过怎么办?