美文网首页
2020-08-16

2020-08-16

作者: 惬意摩奇 | 来源:发表于2020-08-16 16:47 被阅读0次

import numpyas np

import matplotlib.pyplotas plt

def BresenhamLine(img,x1, y1, x2,  y2):

pointList = []

y_neg =False

    dx = x2 - x1

if (dx <0):#向左走,就将起点终点调换

        temp = x2

x2 = x1

x1 = temp

temp = y2

y2 = y1

y1 = temp

dx = x2 - x1# 重新计算dx

    dy = y2 - y1

if (dy <0):# 向下走,就将计算出来的y加个负号

        y_neg=True

        dy=-dy

x = x1

y = y1#从起点开始

    if(dx==0):#打竖画线,向左走换了(x1,y1),(x2,y2),向下走没有换,注意

        y=min(y1,y2)

y_end=max(y1,y2)

while(y<=y_end):

img[x, y] =1

            y+=1

            pointList.append([x, y])

return img,pointList

elif(dy==0):#打横画线

        while (x <= x2):

img[x, y] =1

            x+=1

            pointList.append([x, y])

return img,pointList

else:

k = dy /(1.0*dx)#斜率

    if (abs(k) <=1):#画横斜线,|斜率|<=1

        sign_k =True  # 斜率标记

        xend = x2

else:#| 斜率|>1

        sign_k =False# 等会关于y=x对称,计算|斜率|<=1的值,画|斜率|>1的画

        #先打横了来算,画的时候才对称

        xend = x1+dy

temp=dy

dy=dx

dx=temp

k = dy / (1.0*dx)# 斜率

    p =2 * dy - dx#P0 = 2*dy - dx

    v =2 * dy

u = p - dx#Pk+1 = Pk + 2*dy - 2*dx,u 表示2*dy - 2*dx

############开始画线###################3

    b=y1-x1

while ( x <= xend):

if (sign_k ==True):#画横斜线,|斜率|<=1

            if(y_neg==True):#向下走,画横线,只需要关于y=y0上下翻转就好了

                #SetPixel(hDC, x, y, color);

                img[x, 2*y1-y] =1#(x,-y)

                pointList.append([x, y])

else:#向上走,画横线,最正常了

                img[x, y] =1#(x,y)

                pointList.append([x, y])

else :#画竖斜线,|斜率|>1

#SetPixel(hDC, y, x, color);

            if (y_neg ==True):#画竖斜线,又向下走,要先关于y=kx+b对称,之后再关于y=y0上下翻转

                # SetPixel(hDC, x, y, color);

                img[y-b,  2*y1-(x+b)] =1#(y,-x)

                pointList.append([x, y])

else:#向上走,画竖斜线,关于y=kx+b对称

                img[y-b, x+b] =1#(y,x)

                pointList.append([x, y])

if (p>0):

y+=1

            p = p + u

#cout << "1 ";

        else:

p = p + v

#//cout << "0 ";

        x+=1

    return img,pointList

if __name__ =='__main__':

img = np.full([100,100],np.nan)

# plt.imshow(img)

# plt.show()

    line = []

count =0

    for iin range(img.shape[0]):

for jin range(img.shape[1]):

if np.sqrt((i-50)**2+(j-50)**2)<50 and np.sqrt((i-50)**2+(j-50)**2)>48  and img[i,j]!=1:

img,pointList = BresenhamLine(img, i, j, 50, 50)

line.append(pointList)

for iin range(img.shape[0]):

for jin range(img.shape[1]):

if np.sqrt((i-50)**2+(j-50)**2)<50 and img[i,j]!=1:

img,pointList = BresenhamLine(img, i, j, 50, 50)

line.append(pointList)

print(len(line))

plt.imshow(img)

plt.show()

相关文章

  • 【周总结】第九期第14周07号-醒

    2020-08-16 【本周计划/总结】 一、职业 本周在自习教室学习效率很高,做了很多东西,但是还是质量没有达到...

  • 投资策略

    update: 2020-08-16 主要精力 期权 主要做卖方 次要精力 门票股 不时轮动(压舱石/打新)参考集...

  • 2020-08-16 思考成长周复盘

    一 时间 2020-08-10 ~ 2020-08-16 二 围绕思考成长所做的事情 1.每日早起,每日利用精力最...

  • 《一日之计》

    时间:2020-08-16 进度:第5章 晚间例程 P143-P153 经典语录: 1.晚间历程能让你的头脑在清晨...

  • 独立开发者记录的第七周

    记录日期(2020-08-16) 这周是记录的第七周了,这周继续忙,每天都很充实。 不多介绍了,像了解我具体是干什...

  • 2020-08-17

    2020-08-16 姓名 :曹静杰 企业名称 : 辽宁辽阳丛迪服装有限公司 组别 388期 反省1组 志工529...

  • 2020-08-18

    2020-08-16 姓名 :曹静杰 企业名称 : 辽宁辽阳丛迪服装有限公司 组别 388期 反省1组 志工529...

  • 雨中屋檐

    2020-08-16 星期天 雨 ​NO.01 雨已经下了两周。大雨、暴雨、阵雨、小雨轮流交替,流水线不能停就是了...

  • 2020年8月16日草帽诗社赴梨木台景区文化采风诗画行

    2020-08-16 为用文学力量振奋人们精神,助力新冠疫情后的复工复产,弘扬中华优秀传统文化,倡导健康写作阅读,...

  • 2020-08-16

    让学习变的简单;

网友评论

      本文标题:2020-08-16

      本文链接:https://www.haomeiwen.com/subject/igatjktx.html