看板 C_and_CPP 關於我們 聯絡資訊
最近在解一個問題,關於線段的合併 我找不到一個比較好的結構or演算法來達成 假設我有下列資料 0,0 0,1 0,1 0,5 1,1 0,1 一行表示一條線段,例如第一行表示從座標(0,0)到(0,1)的線段 現在的問題是,我想進行線段合併 亦即範例中的第一行跟第二行可以合併為(0,0)到(0,5)的線段 目前我的作法是將所有線段存在list中 然後跑兩層迴圈一個一個比對 但是這樣的作法感覺有點沒效率@@而且要寫得很複雜 請問有比較好的方式嗎? 題目不會有線段壓線段的問題 亦即當我有(0,0) - (0,1)這條線段時 就不可能會有另一條線段覆蓋過他,如(0,0) - (0,2) 線段只有分為水平跟垂直兩種,不會有其他類型的轉彎 (如(0,0) - (1,1)這種線段不會出現) 最好的作法就是跑兩層迴圈嗎@@" 煩請高手指導:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.138.145.212
ledia:先把所有線段排序, 比大小的方式, 先斜率, 再 x, 再 y 04/17 13:52
ledia:同斜率才會接起來, 因為不覆蓋, 所以同斜率中只有 04/17 13:53
ledia:以 x (或 y) 座標來看相鄰的點才有可能接起來 04/17 13:53
karcher:可以先取一點為參考中心,然後取得所有以該參考點為出發點 04/17 14:11
karcher:的向量集合。然後用計算determinant的方式將集合分類 04/17 14:13
snowlike:x=k(常數),排序y;y=k,排序x;陣列{0,1,1,5}重複出現就幹掉 04/17 15:03
Ebergies:那這樣 {0,5} 是啥意思 XD 04/17 15:04
snowlike:線段0-5,不排序也沒關係輸出再排就好了 04/17 15:05
maplefog:給每個線段一個element number,建立connection matrix 04/17 15:49
DRLai:感謝樓上幾位@@我最後是使用s大說得陣列方式解決m(_ _)m 04/18 02:48