二維瓦片網格邊界檢測

2021-09-26 19:49:21 字數 1508 閱讀 8781

二維瓦片網格邊界檢測

1. 每個網格只考慮enws四個相鄰格仔

四個相鄰格仔ensw編號為0~3

2. 當前方向d(0~3): 如果當前格仔是上乙個格仔選擇的ensw(0~3)中的乙個, 則這個選擇就是當前方向

3. 選擇下乙個的策略:

按找以下優先順序判斷 (d+3)%4, (d+4)%4, (d+5)%4, (d+6)%4

(第一優選是右手側, 最後一項是原路返回)

如果這四個點都不是, 則本點是孤立點.

4. 頭節點

檢測到的第乙個邊界點作為頭節點, 把與頭節點相鄰的外界點(或者邊界)看作上乙個點.

如果是按照w->e, n->s的順序檢測, 則頭節點的方向是e

5. 結束

當再次遇到頭結點, 則結束

#include enum dir ;

enum ;

struct point

bool operator!=(const point& p) const

// 邊界和外部

bool checkpoint(int* map, int w, int h)

// 相鄰點

void getnearpoints(point near[dirmax]) const

// 下乙個點

point getnextpoint(int* map, int w, int h, point near[dirmax], dir& d)

}// 孤點, 返回自己

return *this;

}};int main() ,,,

,,,,

,, ,,

}; int w = 9;

int h = 12;

// 查詢頭點

point head = ;

bool findhead = false;

for (int i = 0; i < h && !findhead; ++i)

}} // (本程式只處理其中的一塊區域, 並且不考慮內部空洞)

if (!findhead) return 1;

point cur = head;

dir d = e;

point near[dirmax];

do while (cur != head);

// 顯示

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

std::cout << std::endl;

} return 0;}/*

執行輸出:

000222000

002212200

022122220

222220000

000220000

000200000

000200000

022222220

021111120

021112220

022222000

000002222

*/

二維網格遷移

給你乙個 n 行 m 列的二維網格 grid 和乙個整數 k。你需要將 grid 遷移 k 次。每次 遷移 操作將會引發下述活動 輸入 grid 1,2,3 4,5,6 7,8,9 k 1 輸出 9,1,2 3,4,5 6,7,8 輸入 grid 3,8,1,9 19,7,2,5 4,6,11,10...

Grid 網格二維布局 筆記

首先,你必須使用 display grid 將容器元素定義為乙個 grid 網格 布局,使用 grid template columns 和 grid template rows 設定 列 和 行 的尺寸大小,然後通過 grid column 和 grid row 將其子元素放入這個 grid 網格...

對二維資料進行邊界拓展

對二維資料處理的時候,常常遇到須要越界的問題。比方對影象進行濾波操作。對原始資料的邊界進行拓展。然後使用拓展後的資料作處理,能夠解決越界的問題。依據拓展出的資料的值來自 能夠分為多種邊界拓展方式,我們要實現的是將邊界進行奇對稱拓展。舉例說明什麼是奇拓展。比方對原始二維資料向左拓展4列,那麼在邊界上向...