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