參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類

題目:凸形直線環繞系統 (Convex Rectilinear Surround System)


問題描述
(一)從一些重疊區塊(Overlapped blocks)找出其凸形直線環繞 (Convex rectilinear surround)為幾何上的一個基本應用問題,如下圖左方所示為三個區塊相互重疊,其凸形直線環繞如下圖中間所示之粗線框。但本系統排除凹形直線環繞 (Concave rectilinear surround)情況,如下圖右方之圓圈內所示之凹形。



(二)從一些重疊區塊找出其凸形直線環繞有下列兩種參考方法,但不限於此兩種參考方法。
參考方法 1: 如下圖左方所示,先從三個區塊的三條左邊線找出沒重疊的邊線;同理,再各對三條右邊線、下邊線、上邊線各找出沒重疊的邊線;最後組合這些沒重疊邊線而成為凸形直線環繞。
參考方法 2: 如下圖右方所示,先從最低 y 座標的左下角點 ,依順時鐘方向找出凸形直線點 ②、③ …,直到最高 y 座標為止,而得到凸形直線點 ① ~ ⑥;同理,再從最高 y 座標的右上角點,依順時鐘方向找出凸形直線點,直到最低 y 座標為止;最後連結這些凸形直線點而成為凸形直線環繞。



(三) 系統設計:
(1)請參考(一)(二)陳述內容與方法,設計一個「凸形直線環繞系統」。
(2) 如下圖左方所示,當系統啟動或每當滑鼠點選一下 Random Blocks 鍵,能隨機產生 3~4 個重疊區塊,且每個區塊左下角座標(x1,y1)範圍各為 20~80,長度與寬度範圍各為 40~200,並立即清除繪圖畫布及使用不同顏色(或線型態)與虛線繪出這些區塊。
(3) 如下圖右方所示,每當滑鼠點選一下 Convex Rectilinear 鍵,能立即找出這些重疊區塊的凸形直線環繞及使用紅色與粗實線繪出,且與左邊重疊區塊圖相對照。
(4) 上述可重複操作直至滑鼠點選一下 Exit 鍵而離開此系統。



範例
輸入格式:當系統啟動或每當滑鼠點選一下 Random Blocks 鍵,隨機產生 3~4 個重疊區塊,每個區塊左下角座標 (x1,y1) 各為:20~80,長度與寬度各為:40~200,並立即清除繪圖布及使用不同顏色(或線型態)與虛線繪出這些區塊,如下圖左方所示為四個重疊區塊。
輸出格式:每當滑鼠點選一下 Convex Rectilinear 鍵,立即找出這些區塊的凸形直線環繞並使用紅色與粗實線繪出,如下圖右方所示為四個重疊區塊與凸形直線環繞之相對照。



完成後影片


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