python扫描线填充算法详解
本文实例为大家分享了python扫描线填充算法,供大家参考,具体内容如下
介绍
1.用水平扫描线从上到下扫描由点线段构成的多段构成的多边形。
2.每根扫描线与多边形各边产生一系列交点。将这些交点按照x坐标进行分类,将分类后的交点成对取出,作为两个端点,以所填的色彩画水平直线。
3.多边形被扫描完毕后,填色也就完成。
数据结构
活性边表:
新边表:
代码(使用数组)
importnumpyasnp fromPILimportImage fromPILimportImageDraw fromPILimportImageFont array=np.ndarray((660,660,3),np.uint8) array[:,:,0]=255 array[:,:,1]=255 array[:,:,2]=255 foriinrange(0,660,1): array[i,330]=(0,0,0) forjinrange(0,660,1): array[330,j]=(0,0,0) defcreat_Net(point,row,y_min,y_max): Net=[([]*y_max)foriinrange(y_max)] point_count=point.shape[0] forjinrange(0,point_count): x=np.zeros(10) first=int(min(point[(j+1)%point_count][1],point[j][1])) x[1]=1/((point[(j+1)%point_count][1]-point[j][1])/(point[(j+1)%point_count][0]-point[j][0]))#x的增量 x[2]=max(point[(j+1)%point_count][1],point[j][1]) if(point[(j+1)%point_count][1]=3andx_image[0]==x_image[1]andx_image[2]>x_image[1]): x_image[1]=x_image[2] draw_line(i,x_image[0],x_image[1]) linshi=[]*3 forcellinx_sort: ifcell[2]>i: cell[0]+=cell[1] linshi.append(cell) x_sort=linshi[:] x_image=[]*3 forcellinx_sort: x_image.append(cell[0]) x_image.sort() draw_line(i,x_image[0],x_image[1]) defmain(): point=[[55,40],[100,80],[100,160],[55,180],[10,160],[10,80]] point=np.array(point) polygon_fill(point) image=Image.fromarray(array) image.save('saomao.jpg') image.show() if__name__=="__main__": main()
实例:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。