利用Python绘制圆
短信预约 -IT技能 免费直播动态提醒
一、实验目的
设计一个全白的图片,并在其间绘制一个圆最终显示该图片。
二、设计方案
引入PIL中的Image模块,使用Image.new()创建新的空白图片
2、利用putpixel()函数放置一个黑色像素(RGB中0代表黑色,255代表白色)
3、使用Bresenham画圆和中点画圆两种方式绘制圆形,要求:其圆心坐标为(249,249),半径为150像素,同时要求绘制方法作为函数调用
三、详细代码
from PIL import Imagedef circle1(r) :#中点画圆法g = Image.new("RGB", (500, 500), color="white") #设置白色背景x = 0 #初始圆的圆心横坐标y = r #初始圆的纵坐标d =1.25-r #计算判别量g.putpixel((x+249, y+249), 0) #放置像素点到对应的位置g.putpixel((249 - x, y + 249), 0) #放置像素点到对应的位置g.putpixel((x + 249, 249 - y), 0) #放置像素点到对应的位置g.putpixel((249 - x, 249 - y), 0) #放置像素点到对应的位置g.putpixel((y + 249, x + 249), 0) #放置像素点到对应的位置g.putpixel((249 - y, x + 249), 0) #放置像素点到对应的位置g.putpixel((y + 249, 249-x), 0) #放置像素点到对应的位置g.putpixel((249-y,249-x), 0) #放置像素点到对应的位置while x < y: #判断下一个点的位置 if d <0: d+=2*x+3 x += 1 else: d+=2*(x-y)+5 x += 1 y -= 1 g.putpixel((x + 249, y + 249), 0) #画点 g.putpixel((249 - x, y + 249), 0) #画点 g.putpixel((x + 249, 249 - y), 0) #画点 g.putpixel((249 - x, 249 - y), 0) #画点 g.putpixel((y + 249, x + 249), 0) #画点 g.putpixel((249 - y, x + 249), 0) #画点 g.putpixel((y + 249, 249 - x), 0) #画点 g.putpixel((249 - y, 249 - x), 0) #画点g.show() #展示成果def circle2(r): #Bresenham画圆g=Image.new("RGB",(500,500),"white") #建立空白背景图片x=0 #设立初始横坐标轴y=r #设立初始横坐标轴p=3-2*r #计算判别量while x<=y: #循环画点 g.putpixel((x + 249, y + 249), 0) #以下八句用于画圆,每次画八分之一,其余由对称而来 g.putpixel((249 - x, y + 249), 0) g.putpixel((x + 249, 249 - y), 0) g.putpixel((249 - x, 249 - y), 0) g.putpixel((y + 249, x + 249), 0) g.putpixel((249 - y, x + 249), 0) g.putpixel((y + 249, 249 - x), 0) g.putpixel((249 - y, 249 - x), 0) if p>=0: #如果判别量〉=零 p+=4*(x-y)+10 #更新判别量 y- =1 #在斜下方画点 x+=1 else: p+=4*x+6 x+=1 #在旁边一格画点g.show() #展示图片circle2(150)#画圆,输入圆的半径Bresenham画圆circle1(150)#画圆,中点画圆法
四、实验结果
五、实验体会
这个实验要求我们学会中点画圆以及Bresenham画圆的方法,要求学会其原理,以及对于点的处理方法,先画八分之一圆,通过平移到对应位置,然后对称获得整圆。在此过程中,我们需要不断地计算下一个点的近似点
来源地址:https://blog.csdn.net/weixin_64633079/article/details/131600068
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341