2011-08-23 8 views
1

위키 피 디아에서 파이썬으로 Bresenham algorithm을 구현했지만, 일부 라인에서는 작동하지 않습니다. 1,0에서 0,1처럼 멈추지 않고 계속해서 슈퍼 긴 줄Bresenham 라인이 종료되지 않습니다

def line(x0, y0, x1, y1): 
    dx = x1 - x0 
    dy = y1 - y0 
    sx = x0 < x1 and 1 or -1 
    sy = y0 < y1 and 1 or -1 
    err = dx - dy 

    points = [] 
    x, y = x0, y0 
    while True: 
     points += [(x, y)] 
     if x == x1 and y == y1: 
      break 
     e2 = err * 2 
     if e2 > -dy: 
      err -= dy 
      x += sx 
     if e2 < dx: 
      err += dx 
      y += sy 
    return points 

답변

0

당신은 "if e2 > -dy:"의 유형이있다. 마이너스 기호가 잘못되었습니다.

1

당신은 dxdy의 초기화에 abs에 대한 호출을 누락 :

dx = abs(x1 - x0) 
dy = abs(y1 - y0) 
관련 문제