奇怪的知识增加了?!?!------- 基于Python实现中点Bresenham算法(未优化版本)

环境

Windows10 、Python3.8、一个用了快20年的脑子…
用Python写了个Bresenham算法的demo,写的比较简单,不喜勿喷,天下程序员是一家
在这里插入图片描述

漏洞!!!

主要是针对计算机图形学留的作业写的,结果忘了写针对斜率小于等于0的部分!

在这里插入图片描述

奥利给!开始看代码!

一、这部分就是求斜率的嘛,这么简单谁不会写呀

import math #好像没有用到???

#求斜率
def slope(x1,y1,x2,y2):
    x_1 = float(x1)
    y_1 = float(y1)
    x_2 = float(x2)
    y_2 = float(y2)
    slope = (y_2-y_1)/(x_2-x_1)
    return slope

二、求方程式,我代码虽然喜欢写的整齐,但是啰嗦废话多

#求方程式,啰啰嗦嗦了一大堆,其实不如把转换类型搞到主函数
def Linear_equation(x1,y1,x2,y2,x,y):
    k = slope(x1,y1,x2,y2)
    x_1 = float(x1)
    y_1 = float(y1)
    x_2 = float(x2)
    y_2 = float(y2)
    f = y-y_1-k*(x-x_1)
    return f

三、判断斜率大小(没什么p用~)

def judge(slope):
    if slope>=1:
        print("k>=1")
    elif slope>=0 and slope<1:
        print("k属于0-1")
    else:
        print("k<0")

四、Bresenham算法(我的垃圾代码哦 )的主体来了!

#算法主体,只能测算出斜率大于零的情况
#因为我是小小年纪就健忘的带学生
def Bresenhan(x1,y1,x2,y2):
    a = float(x1)
    b = float(y1)
    c = float(x2)
    d = float(y2)
    slope = (d - b) / (c - a)
    if slope>1:
        while a<=c and b<=d:
            x = a+0.5
            y = b+1.0
            print("(",a,b,")")
            f = Linear_equation(x1,y1,x2,y2,x,y)
            if f>0:
                a += 1
                b += 1
            elif f<=0:
                a += 0
                b += 1
    elif slope>0 and slope<1:
        while a<=c and b<=d:
            x = a + 1.0
            y = b + 0.5
            print("(", a, b, ")")
            f = Linear_equation(x1,y1,x2,y2,x,y)
            if f>0:
                a += 1
                b += 0
            elif f<=0:
                a += 1
                b += 1
    else:
        exit()

五、写了个主函数练习Python(拖延时间

def main():
    #try一下
    try:
        x1 = input("请输入x1:")
        y1 = input("请输入y1:")
        x2 = input("请输入x2:")
        y2 = input("请输入y2:")
        k = slope(x1,y1,x2,y2)
        judge(k)
        Bresenhan(x1, y1, x2, y2)
    #这部分主要就是监控一下异常
    except OSError as err:
        print("OS error: {0}".format(err))
    except ValueError:
        print("Could not convert data to an integer.请确认输入的数据为数字")
    except:
        print("Unexpected error:发生未知错误,导致程序崩溃")
        raise

if __name__ == '__main__':
    main()

六、来看测试结果hhhhh

在这里插入图片描述
在这里插入图片描述

七、我不想没头发,所以我今晚不会再去想太多算法和代码了,睡觉了

在这里插入图片描述
在这里插入图片描述

八、源代码合起来发,哈哈哈哈哈哈哈哈哈哈红红火火

import math #好像没有用到???

#求斜率
def slope(x1,y1,x2,y2):
    x_1 = float(x1)
    y_1 = float(y1)
    x_2 = float(x2)
    y_2 = float(y2)
    slope = (y_2-y_1)/(x_2-x_1)
    return slope

#求方程式,啰啰嗦嗦了一大堆,其实不如把转换类型搞到主函数
def Linear_equation(x1,y1,x2,y2,x,y):
    k = slope(x1,y1,x2,y2)
    x_1 = float(x1)
    y_1 = float(y1)
    x_2 = float(x2)
    y_2 = float(y2)
    f = y-y_1-k*(x-x_1)
    return f

#判断斜率大小,这就是刚开始写伪代码的一个产物
def judge(slope):
    if slope>=1:
        print("k>=1")
    elif slope>=0 and slope<1:
        print("k属于0-1")
    else:
        print("k<0")

#算法主体,只能测算出斜率大于零的情况
def Bresenhan(x1,y1,x2,y2):
    a = float(x1)
    b = float(y1)
    c = float(x2)
    d = float(y2)
    slope = (d - b) / (c - a)
    if slope>1:
        while a<=c and b<=d:
            x = a+0.5
            y = b+1.0
            print("(",a,b,")")
            f = Linear_equation(x1,y1,x2,y2,x,y)
            if f>0:
                a += 1
                b += 1
            elif f<=0:
                a += 0
                b += 1
    elif slope>0 and slope<1:
        while a<=c and b<=d:
            x = a + 1.0
            y = b + 0.5
            print("(", a, b, ")")
            f = Linear_equation(x1,y1,x2,y2,x,y)
            if f>0:
                a += 1
                b += 0
            elif f<=0:
                a += 1
                b += 1
    else:
        exit()


def main():
    #try一下
    try:
        x1 = input("请输入x1:")
        y1 = input("请输入y1:")
        x2 = input("请输入x2:")
        y2 = input("请输入y2:")
        k = slope(x1,y1,x2,y2)
        judge(k)
        Bresenhan(x1, y1, x2, y2)
    #这部分主要就是监控一下异常
    except OSError as err:
        print("OS error: {0}".format(err))
    except ValueError:
        print("Could not convert data to an integer.请确认输入的数据为数字")
    except:
        print("Unexpected error:发生未知错误,导致程序崩溃")
        raise

if __name__ == '__main__':
    main()

我竟然是头一回写博客???

我会写博客了么??????
在这里插入图片描述
晚安。

发布了3 篇原创文章 · 获赞 2 · 访问量 99

猜你喜欢

转载自blog.csdn.net/qq_44183524/article/details/104384001