首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >改进的Bresenham直线算法

改进的Bresenham直线算法
EN

Stack Overflow用户
提问于 2010-04-29 12:05:20
回答 1查看 3K关注 0票数 1

我正在尝试使用Bresenham的直线算法来计算网格上的视场。我正在使用的代码计算行没有问题,但我有问题,让它总是返回运行从起点到终点的行。我需要做什么才能使返回的所有行从(x0,y0)运行到(x1,y1)

代码语言:javascript
复制
def bresenham_line(self, x0, y0, x1, y1):
    steep = abs(y1 - y0) > abs(x1 - x0)
    if steep:
        x0, y0 = y0, x0  
        x1, y1 = y1, x1

    if x0 > x1:
        x0, x1 = x1, x0
        y0, y1 = y1, y0

    if y0 < y1: 
        ystep = 1
    else:
        ystep = -1
        
    deltax = x1 - x0
    deltay = abs(y1 - y0)
    error = -deltax / 2
    y = y0

    line = []    
    for x in range(x0, x1 + 1):
        if steep:
            line.append((y,x))
        else:
            line.append((x,y))
                
        error = error + deltay
        if error > 0:
            y = y + ystep
            error = error - deltax
    return line
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-29 12:18:25

请记住,您是否切换了x0和x1,如果切换了,则反转列表。

代码语言:javascript
复制
if x0 > x1:
    x0, x1 = x1, x0
    y0, y1 = y1, y0

变成了

代码语言:javascript
复制
switched = False
if x0 > x1:
    switched = True
    x0, x1 = x1, x0
    y0, y1 = y1, y0

在结尾处,只需添加:

代码语言:javascript
复制
if switched:
    line.reverse()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2734714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档