四邊形填充

2021-09-12 11:36:06 字數 1351 閱讀 2585

四邊形填充算,除了比較笨的洪流法外,就是掃瞄線法了

基本演算法是:

(1)       求交,計算掃瞄線與多邊形的交點

(2)       交點排序,對第2步得到的交點按照x值從小到大進行排序;

(3)       顏色填充,對排序後的交點兩兩組成乙個水平線段,以畫線段的方式進行顏色填充;

(4)       是否完成多邊形掃瞄?如果是就結束演算法,如果不是就改變掃瞄線,然後轉第1步繼續處理;

這裡有詳細的介紹:

多邊形區域填充演算法--掃瞄線填充演算法(有序邊表法)

對於四邊形填充,這裡基於掃瞄線演算法,進一步優化,去掉了有序表。

偽**如下:

void fillarea(olm::pointf(&points)[4], uint8_t* map, int width, int height, int col,msimage* binmap);

_line lines[4];

// 找乙個y最小的點,及最小的y和最大的y

float ymin = points[0].y_;

float ymax = points[0].y_;

int mid = 0;

for(int i=0;i<4;i++)

}printf("top point mid: %d\n", mid);

// 以此點為線段起點,順時針為4條邊命名

for (int i = 0; i < 4; i++)

int l0 = (mid+3)%4;

int l1 = mid;

printf("*** l0: %d, l1: %d \n", l0,l1);

float x0 ,x1;

//初始起始點為最頂的點

int y = points[mid].y_;

x0 = x1 = points[mid].x_;

printf("*** y: %d, x: %.3f, %.3f \n",y, x0, x1);

getchar();

for(;y=ymax)

//下一條掃瞄線,如果換到了另一條邊上,更新邊索引(為了更新斜率倒數)

if((y+1)>lines[l0].ymax)

if((y+1)>lines[l1].ymax)

x0 -= 1/lines[l0].k;

x1 -= 1/lines[l1].k;

printf("*** l:%d,%d x: %.3f, %.3f \n",l0,l1,x0, x1);

// msencodefile(binmap, "bin.pgm", 85);

// getchar();

}}

四邊形優化

匆匆忙忙搞了一下四邊形優化,也就是做了幾道入門題而已 四邊形不等式詳解 反正我就記住這句話 判斷w是否為凸即判斷 w i,j 1 w i,j 的值隨著i的增加是否遞減 hdu 2829 include include include using namespace std define maxn 1...

定義四邊形 圓的內接四邊形

1 圓內接多邊形定義 多邊形的所有頂點都在同乙個圓上,這個多邊形叫圓內接多邊形,這個圓叫這個多邊形的外接圓。2 圓內接四邊形定義 四邊形的所有頂點都在同乙個圓上,這個四邊形叫圓內接四邊形,這個圓叫這個四邊形的外接圓。3 判定定理 如果乙個四邊形的對角互補,那麼它的四個頂點在同乙個圓上 簡稱四點共圓 ...

四邊形可以分為幾類 四邊形的分類

課題 四邊形分類 課型學案導學課 學習目標 我要在觀察 比較 操作 交流中探索新知。我要進一步認識平行四邊形 長方形 正方形的特徵。我要把四邊形按一定的標準進行分類。教學重 難點 教學重 難點 能把四邊形按一定的標準進行分類 課時安排 共課時 第 課時 導學過 程教師復備預習 導學 創設情景 師 現...