2016-03-15 59 views
0

我生成的線條可能是垂直,水平或對角線(由端點給出),並且希望將它們適應2D網格環境,以便整條線分解成更小的1單位長度的線,並且每個部分僅是垂直或水平的,不是對角線將一條對角線轉換爲正交線段

我現在的做法是把每一行分成1個單位,抓住端點,並把它們當作我的新行。我使用一組來防止重複。

newEdges = Set([]) 
# discretize edges into 1-unit edges 
for edge in cleanEdges: 
    distance = edge[0].distance_to_point(edge[1]) 

    if distance <= d: 
     newEdges.add(edge) 
    else: 
     numNewPoints = int(ceil(distance/d)) # number of new points to add 
     # break up into smaller pieces and add to path 
     prevPoint = edge[0] 
     for i in xrange(numNewPoints): 
      # get x, y coords of new points 
      newX = int(round(edge[0].x + (i * d)/distance * (edge[1].x - edge[0].x))) 
      newY = int(round(edge[0].y + (i * d)/distance * (edge[1].y - edge[0].y))) 
      newPoint = (newX, newY) 

      if prevPoint != newPoint: 
       newEdge = (prevPoint, newPoint) 
       newEdges.add(newEdge) 
       prevPoint = newPoint 

     if prevPoint != edge[1]: 
      newEdge = (prevPoint, edge[1]) 
      newEdges.add(newEdge) 

然而,這不僅笨重,但偶爾會產生對角線段。

將離散所有線條並將對角線轉換爲水平/垂直線段的好方法是什麼?

回答

0

您似乎正在尋找某種形式的Bresenham algorithm。一個現成的可用實現形式爲skimage.draw.line_aa