我生成的線條可能是垂直,水平或對角線(由端點給出),並且希望將它們適應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)
然而,這不僅笨重,但偶爾會產生對角線段。
將離散所有線條並將對角線轉換爲水平/垂直線段的好方法是什麼?