來自多段線的多邊形?(polygon from polyline?)

內容來源於互聯網  原文地址https://www.it1352.com/825785.html

僅作爲學習筆記用

 

 

I am trying to create a polygon from a polyline automatically So far I am stuck with the proper calculation of the extrapolated sides on each part of the polyline.

Condition - the distance between the base line, and the sides is a constant

Polyline from Polygon blueprint

How to calculate the corner points of the sides (blue points) from the base points (red ones )?

我試圖從多段線自動創建一個多邊形
到目前爲止,我堅持正確計算多段線每個部分上的外推邊。


 

條件 - 基線和邊線之間的距離是一個常數。

  • 如何計算邊(藍點)的角點基點(紅色)?
 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(); ((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))); 
 
 float dist = sqrt ((x3-x2)*(x3-x2))+((y3-y2)*(y3-y2))); 
 float dist2 = sqrt 
 
 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 - 半寬*(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 - 半寬*(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-半寬*(y2-y1)/ dist,y1-半寬*(x1-x2)/ dist),QPointF(x2-半寬*(y2-y1)/ dist,y2 - 半寬*(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; 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章