设计一个全白的图片,并在其间绘制一个圆最终显示该图片。
1、引入PIL中的Image模块,使用Image.new()创建新的空白图片
2、利用putpixel()函数放置一个黑色像素(RGB中0代表黑色,255代表白色)
3、使用Bresenham画圆和中点画圆两种方式绘制圆形,要求:其圆心坐标为(249,249),半径为150像素,同时要求绘制方法作为函数调用
from PIL import Image
def 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画圆的方法,要求学会其原理,以及对于点的处理方法,先画八分之一圆,通过平移到对应位置,然后对称获得整圆。在此过程中,我们需要不断地计算下一个点的近似点