參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類 112-5
本地下載題目(dbf)
題目:找出任意區塊間所有重疊區域之系統
(A system for finding all overlapping regions between arbitrary blocks)

問題描述
(一) 幾何圖形學科有一個基本應用,從任意幾個區塊 (blocks) 找出相互間之所有重疊區域(overlapping regions),如下圖所示為 2、3 及 4 個區塊等各有兩個實例,每個實例的左方為任意放置區塊數,箭頭右方為找出對應區塊相互間的所有重疊區域且塗滿顏色 (如紅色)。

(1) 任意 2 個區塊間的所有重疊區域



(2) 任意 3 個區塊間的所有重疊區域



(3) 任意 4 個區塊間的所有重疊區域



(二) 找出任意放置 2~4 個區塊間的所有重疊區域之方法;可依自己的思考方法自行設計,或者可參考此演算法這四個步驟:(1) 假設每一個區塊之左下角與右上角座標分別為(x1,y1)與(x2,y2);(2) 首先檢視任意兩個區塊 b1 與 b2 是否屬於非重疊的四種情況:b1 在 b2 上方、b1 在 b2 下方、b1 在 b2 左方或 b1 在 b2 右方;如不屬於,則可確認這兩個區塊是互相重疊的,再找出其重疊區域之左下角座標為區塊 b1 與 b2 各自 x1 與 y1 之最大值及右上角座標為區塊 b1 與 b2 各自 x2 與 y2 之最小值,並記錄此重疊區域;(3) 依照第(2)步驟,逐一找出每一對區塊間對應的重疊區域而紀錄之;(4) 將這些紀錄的重疊區域綜合聯集起來即為所有重疊區域 (overlapping regions)。

(三) 系統設計:(1) 請參考說明(一)與(二)的陳述,設計一個「找出任意區塊間所有重疊區域之系統」;(2) 當系統啟動或每當滑鼠點選一下 Random Blocks 鍵,能隨機產生 2~4 個區塊,每一個區塊左下角座標(x1,y1)範圍各為 20~80,長度與寬度範圍各為 40~200,且須能立即清除繪圖畫布及使用不同顏色的虛線型態繪出這些區塊,如範例下圖左方所示;(3) 每當滑鼠點選一下 Overlapping Regions 鍵,能立即找出這些區塊間的所有重疊區域,並以紅色實心塗滿繪出,且能與左邊區塊圖相對照,如範例下圖右方所示;(4) 上述可重複操作直至滑鼠點選一下 Exit 鍵而離開此系統。
範例一
輸入正確輸出
找出任意區塊間所有重疊區域之系統

Random Blocks Overlapping Regions Exit



找出任意區塊間所有重疊區域之系統

Random Blocks Overlapping Regions Exit




完成後影片

程式碼下載(GitHub)      程式碼下載(本地)
Microsoft Visual Studio Community 2022 (64 位元) - Current 版本 17.8.1