回答
這是我的代碼在Qt中。這對我很好用
QPolygonF projectPLineToScreenAsPolygon(QPolygonF pline, qreal halfWidth)
{
QPolygonF ret;
QLineF l2_last;
QLineF l4_last;
for(int i = 0; i < pline.size() - 2; i++){
float x1 = pline.at(i).x();
float y1 = pline.at(i).y();
float x2 = pline.at(i + 1).x();
float y2 = pline.at(i + 1).y();
float x3 = pline.at(i + 2).x();
float y3 = pline.at(i + 2).y();
float dist = sqrt(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)));
float dist2 = sqrt(((x3-x2)*(x3-x2))+((y3-y2)*(y3-y2)));
QLineF l1;
QLineF l2;
QLineF l3;
QLineF l4;
if(i > 0){
l1 = l2_last;
l3 = l4_last;
l2 = QLineF (QPointF(x2 + halfWidth * (y3 - y2)/dist2, y2 + halfWidth * (x2 - x3)/dist2), QPointF(x3 + halfWidth * (y3 - y2)/dist2, y3 + halfWidth * (x2 - x3)/dist2));
l4 = QLineF (QPointF(x2 - halfWidth * (y3 - y2)/dist2, y2 - halfWidth * (x2 - x3)/dist2), QPointF(x3 - halfWidth * (y3 - y2)/dist2, y3 - halfWidth * (x2 - x3)/dist2));
} else {
l2 = QLineF (QPointF(x2 + halfWidth * (y3 - y2)/dist2, y2 + halfWidth * (x2 - x3)/dist2), QPointF(x3 + halfWidth * (y3 - y2)/dist2, y3 + halfWidth * (x2 - x3)/dist2));
l4 = QLineF (QPointF(x2 - halfWidth * (y3 - y2)/dist2, y2 - halfWidth * (x2 - x3)/dist2), QPointF(x3 - halfWidth * (y3 - y2)/dist2, y3 - halfWidth * (x2 - x3)/dist2));
l1 = QLineF (QPointF(x1 + halfWidth * (y2 - y1)/dist, y1 + halfWidth * (x1 - x2)/dist), QPointF(x2 + halfWidth * (y2 - y1)/dist, y2 + halfWidth * (x1 - x2)/dist));
l3 = QLineF (QPointF(x1 - halfWidth * (y2 - y1)/dist, y1 - halfWidth * (x1 - x2)/dist), QPointF(x2 - halfWidth * (y2 - y1)/dist, y2 - halfWidth * (x1 - x2)/dist));
}
l2_last = l2;
l4_last = l4;
QPointF pi1;
if(i == 0){
ret.append(l1.p1());
ret.prepend(l3.p1());
}
if(l1.intersect(l2, &pi1) != QLineF::NoIntersection){
ret.append(pi1);
} else {
ret.append(l2.p1());
}
QPointF pi2;
if(l3.intersect(l4, &pi2) != QLineF::NoIntersection){
ret.prepend(pi2);
} else {
ret.prepend(l4.p1());
}
if(i == pline.size() - 3){
ret.append(l2.p2());
ret.append(l4.p2());
}
}
return ret;
}
讓我們兩個相鄰邊緣(紅色線段)是AB和BC(在頂點B相交)。
查找標準化(單位)載體ab和cb。
計算值單元平分線矢量
b =歸一化的(AB + CB)(vector normalizing)
平分線節段的計算值長度(紅點藍點)作爲l=d/sin(fi)
其中d是偏移量,和FI是矢量b和AB之間角度:
fi = atan2(crossproduct(b,ab), dotproduct(b,ab))
查找偏移(藍色)指出
乙'= 乙 + 1 * b
乙 ''= 乙 - L * b
我想它會是'Math.atan2()' - 一個實際的代碼示例會很好。 – davidkonrad
我不知道如何規範化它,既沒有關於B'和B「你可以請發表一些代碼塊的話題。在此先感謝:) –
鏈接添加。你有沒有處理矢量代數?這是絕對必要的幾何工作 – MBo
- 1. 從多段線創建多邊形
- 2. kml編碼多段線/多邊形
- 3. 多邊形與線段相交的多邊形邊信息交集
- 4. 確定線段內多邊形
- 5. 從具有共線邊的多邊形中提取多邊形
- 6. 來自區域的凸多邊形
- 7. 來自sensordata的Matlab繪圖多邊形
- 8. 我如何知道openlayers-3中多邊形內的線段和多邊形?
- 9. SVG中的多邊形和多段線之間的差異
- 10. 使用編碼多段線的多邊形中的孔
- 11. SpriteKit SKPhysicsBody來自CGPath多邊形問題
- 12. DbGeography - 選擇包含在多邊形內的多邊形/線串
- 13. PHP計算多段線周圍的多邊形
- 14. 在封閉的多段線上畫一個多邊形
- 15. 創建段和另一多邊形的多邊形
- 16. 直線多邊形交集
- 17. MapKit線和多邊形
- 18. 編輯多邊形多邊形的多邊形路徑事件
- 19. 多邊形圍繞閉環多段線問題
- 20. 谷歌地圖使用多邊形模擬多段線
- 21. 從bing地圖中刪除多邊形/多段線
- 22. 在Google地圖中圍繞多段線繪製多邊形
- 23. 如何在多段線上添加多邊形?
- 24. 算法 - 如何圍繞多段線構建多邊形
- 25. 此多段線是否穿過此多邊形?
- 26. 如何在JavaScript中圍繞多段線繪製多邊形?
- 27. 多邊形組中的STConvexHull()多邊形
- 28. 檢測n邊多邊形的自交?
- 29. 處理多邊形的多邊形算法,處理跨邊界的多邊形
- 30. 行(來自gpx)與多邊形相交(來自Fusion Table)
多義線的長度是多少? –
你想[緩衝](http://stackoverflow.com/search?q=%5Bgoogle-maps%5D+buffer+polyline)折線。 – geocodezip
多段線的長度約爲100米,整體約爲幾公里。 –