如何計(jì)算點(diǎn)到polyline的距離

? ? ? polyline的本質(zhì)為由大于等于一條線段所組成的線段首位銜接的不閉合的折線。(注:首尾銜接的閉合為polygon,直線為折線的特殊情況)。所以求解點(diǎn)point到polyline的距離的問(wèn)題就轉(zhuǎn)化為求解點(diǎn)到每個(gè)線段的距離。由于實(shí)際中我們多數(shù)使用第三方庫(kù)來(lái)調(diào)用也很輕松方便,但是在這里我們也思考一下這簡(jiǎn)單的小算法也是基礎(chǔ)的圖形學(xué)知識(shí),很多時(shí)候復(fù)雜的算法實(shí)際由多個(gè)簡(jiǎn)單的算法嵌套完成。

實(shí)際計(jì)算過(guò)程如下:

①線段l;

②偏離距離H;

③匹配的結(jié)果坐標(biāo)點(diǎn)P0

④point位置p及p到l的距離h;

⑤線段兩個(gè)端點(diǎn)A1、A2;

⑥線段所在直線l1;

⑦過(guò)線段兩端點(diǎn)做線段的法線p1、p2;

⑧P1、p2與線段所成內(nèi)夾角分別為a,b;

⑨P到A1和A2的距離分別為d1,d2;

圖1 點(diǎn)到線段示意圖

? ? ? 當(dāng)計(jì)算時(shí)我們會(huì)發(fā)現(xiàn)要考慮多種情況,一般我們會(huì)求點(diǎn)到線段所在直線的垂線的距離。實(shí)際上只有point與線段端點(diǎn)組成的三角形不為銳角三角形時(shí)所求垂線長(zhǎng)度才是正確距離。為此我畫(huà)了一個(gè)表列出所有情況(表中p的結(jié)果為匹配到線段上的最近點(diǎn)):

圖2 點(diǎn)到線段距離的情況

? ? ?遍歷計(jì)算得出所有點(diǎn)到直線的距離之后就求解最小值。這是一件很簡(jiǎn)單的事了。(你們會(huì)問(wèn),這么簡(jiǎn)單的算法有什么用?我在GPS導(dǎo)航(很渣的)實(shí)現(xiàn)中消除GPS因?yàn)檎`差不在路線上的簡(jiǎn)單處理,還有可以做鼠標(biāo)拾取polyline/polygon上的點(diǎn)需要。)

下面為簡(jiǎn)單的實(shí)例代碼:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容