[問題] 如何判斷點是否在線段上

看板C_Sharp (C#)作者 (RK)時間9年前 (2016/08/12 03:02), 8年前編輯推噓0(005)
留言5則, 3人參與, 最新討論串1/2 (看更多)
各位大大晚安,小弟第一次在板上PO文,如有冒犯還請見諒。 小弟有一問題相問: 問題是關於直線段連線的問題,以下所有線段、連線都是rectilinear的 假設目前已知存在某線段(即知其頭尾座標) 例如(0,10)->(10,10),其中(10,10)為可連接之端點 接著我有一點(7,6),想求此點連線到該線段或是該端點的最短距離 就會有兩個連法,第一個連法就是直接垂直往上連到(7,10) 第二個連法就是往右邊畫線到(10,6)再往上連到(10,10),而產生兩段線段。 當然我可以直接看出(7,6)->(7,10)走的距離比較短。 但我怎麼判斷走到(7,10)之後,線段不會再往右邊連到(10,10)? 也就是我如何判斷我的中繼點已經在已知線段上,而不再繼續連線? 我是有想到一個方法就是判斷欲連接點(7,6)之X值是否在第一線段之X值範圍內 即 0 <= 7 <= 10,若是則可直接垂直連至線段Y=10上,但總覺得應該有更好 的方式,因為這樣我線段數一多的時候判斷式似乎就更加複雜了。 因為一旦第二個點連至第一個點或第一個點產生之線段之後,其第二個點或其線段也會 變成下一個點可連接之選擇。 敘述不佳的話還請各位大大見諒! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.12.120 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1470942120.A.36D.html ※ 編輯: RogerKao (114.42.12.120), 08/12/2016 03:03:45

08/12 10:35, , 1F
x0<=x && x<=x1 && y0<=y && y<=y1
08/12 10:35, 1F

08/12 20:27, , 2F
感謝樓上回答,這我剛有想到,不知道是否還有其他方法?
08/12 20:27, 2F

08/12 23:06, , 3F
你的到線段跟到端點距離是想要怎樣取捨?
08/12 23:06, 3F
不太懂樓上的問題是什麼,我覺得我把問題在敘述清楚一點好了, 我整個問題是想要把很多點用直線連起來,想要連短的,但是不拘限於要點跟點直接連線 也就是我可以增加新的節點(Stenier point) 假設今天第一個點在(10,10) 他連到了(0,10) 那這個線段就是可連接的線段,也就是說現在新的點(7,6)的可連接選擇為 (10,10) 這個點或者是(0,10)到(10,10)這條線段。 因為我要求最短又是直線,所以人去看就是(7,6)直接往上連就結束了。 但假設我又有一個點是(12,8) 由於他X值比較大所以他可憐的最短距離應該是經由 中繼點(10,8)然後再連到(10,10)而不是去連 (0,10)到(10,10)這條線段。 所以我的問題是,我要怎麼判斷我下一個點是可以直接連線到原有點或線段 還是要會走L型去連到原有點或線段。 ------------------------------x P1(10,10) x P3(12,8) x P2(7,6) 當然我已經知道我可以藉由判斷 x值是否在原有線段的範圍內 就如同一樓所說的 這樣我就可以直接連直線過去,我想知道的是有沒有其他方法去做判斷? 感謝各位熱心的回覆。 ※ 編輯: RogerKao (114.42.12.120), 08/13/2016 00:18:32

08/13 17:52, , 4F
1.直角公式 A^2 + B^2 = C^2 2.三角形給三個邊算角度
08/13 17:52, 4F

08/16 23:26, , 5F
感謝樓上大大熱心解答!
08/16 23:26, 5F
文章代碼(AID): #1NhCkeDj (C_Sharp)
文章代碼(AID): #1NhCkeDj (C_Sharp)