//
// 功能: 填充多邊形
//// 引數: lppoints: 指向頂點座標陣列的指標,陣列型別為point,多邊形由它們順次封閉連線得到
// ncount: 頂點的個數
// ncolor: 填充的顏色 預設為黑色
// pdc: 裝置控制代碼指標
//// 返回: 無返回值
//// 說明: 可以是邊相交的多邊形
//// 建立(修改): 2003-10-13 16:31 曹海
//void fillpolygon(lppoint lppoints,int ncount, cdc *pdc, int ncolor/*=0*/)
edge, * lpedge;
int i=0,j=0,k=0;
int y0=0,y1=0; // 掃瞄線的最大和最小y座標
lpedge paet=null; // 活化邊表頭指標
lpedge * pet=null; // 邊表頭指標
paet=new edge; // 初始化表頭指標,第乙個元素不用
paet->pnext=null;
// 獲取y方向掃瞄線邊界
y0=y1=lppoints[0].y;
for(i=1;iy1)
y1=lppoints[i].y;
}if(y0>=y1) return;
// 初始化邊表,第乙個元素不用
pet=new lpedge[y1-y0+1];
for(i=0;i<=y1-y0;i++)
for(i=0;i// 構造邊
peg =new edge;
k=(lppoints[i].y>lppoints[j].y)?i:j;
peg->ymax=lppoints[k].y; // 該邊最大y座標
k=(k==j)?i:j;
peg->x=(float)lppoints[k].x; // 該邊與掃瞄線焦點x座標
if(lppoints[i].y != lppoints[j].y)
peg->dx=(float)(lppoints[i].x-lppoints[j].x)/(lppoints[i].y-lppoints[j].y);// 該邊斜率的倒數
peg->pnext=null;
// 插入邊
ppeg=pet[lppoints[k].y-y0];
while(ppeg->pnext)
ppeg=ppeg->pnext;
ppeg->pnext=peg;
}// end if
}// end for i
// 掃瞄
for(i=y0;i<=y1;i++)
// 按照x遞增排序paet
peg0=paet;
while(peg0->pnext)
pegi=pegmax->pnext;
pegmax->pnext=pegi->pnext;
pegi->pnext=paet->pnext;
paet->pnext=pegi;
if(peg0 == paet)
peg0=pegi;
}// 遍歷活邊表,畫線
peg0=paet;
while(peg0->pnext)
else
break;
}// 把ymax=i的節點從活邊表刪除並把每個節點的x值遞增dx
peg0=paet;
while(peg0->pnext)
peg0->pnext->x+=peg0->pnext->dx; //把每個節點的x值遞增dx
peg0=peg0->pnext;}}
// 刪除邊表
for(i=0;iif(pet[i])
delete pet[i];
if(paet)
delete paet;
if(pet)
delete pet;
}
多邊形填充演算法實現
功能 填充多邊形 引數 lppoints 指向頂點座標陣列的指標,陣列型別為point,多邊形由它們順次封閉連線得到 ncount 頂點的個數 ncolor 填充的顏色 預設為黑色 pdc 裝置控制代碼指標 返回 無返回值 說明 可以是邊相交的多邊形 void fillpolygon lppoint...
掃瞄多邊形填充演算法
掃瞄多邊形填充演算法 在做手機地圖的過程中,由於j2me沒提供多邊形填充的api,只能自己實現了,以下是實現的思路,請批評指正 多邊形填充,就是把多邊形所佔據的柵格象素賦予指定的顏色值。要完成這個任務,乙個首要的問題就是求出多邊形所佔據的柵格象素,判斷乙個網格在多邊形內還是多邊形外,在多邊形內的象素...
掃瞄多邊形填充演算法
多邊形填充,就是把多邊形所佔據的柵格象素賦予指定的顏色值。要完成這個任務,乙個首要的問題就是求出多邊形所佔據的柵格象素,判斷乙個網格在多邊形內還是多邊形外,在多邊形內的象素,則賦予指定的顏色值,多邊形外的象素,則不賦予指定的顏色值,具體該如何判斷象素是否在多邊形內呢?這裡我們採用 掃瞄線多邊形填充演...