Math 如何在不使用乘法的情况下绘制填充圆?

Math 如何在不使用乘法的情况下绘制填充圆?,math,graphics,Math,Graphics,假设您在一个受限的计算环境中,乘法运算非常昂贵或不可用。您可以访问已知尺寸图像的像素流。如何在图像上绘制圆形覆盖?下面是一个Python脚本,演示如何在不使用乘法的情况下绘制圆形。它使用公式x2+y2>r2检查当前像素位置(x,y)是否在圆外 通过使用加法,可以保持平方值的运行计算,因为。当你在像素中迭代时,你会不断地向你正在运行的“正方形”计算中添加一个数字(称之为“z”),对于每个像素,你也会向“z”中添加2个 下面的\uuuu init\uuuu函数确实包含一些乘法运算。但是,如果图像尺寸

假设您在一个受限的计算环境中,乘法运算非常昂贵或不可用。您可以访问已知尺寸图像的像素流。如何在图像上绘制圆形覆盖?

下面是一个Python脚本,演示如何在不使用乘法的情况下绘制圆形。它使用公式x2+y2>r2检查当前像素位置(x,y)是否在圆外

通过使用加法,可以保持平方值的运行计算,因为。当你在像素中迭代时,你会不断地向你正在运行的“正方形”计算中添加一个数字(称之为“z”),对于每个像素,你也会向“z”中添加2个

下面的
\uuuu init\uuuu
函数确实包含一些乘法运算。但是,如果图像尺寸恒定,编译器将执行乘法运算,并仅将结果加载到设备上。如果图像尺寸不是恒定的,则启动时只需执行一次“慢”乘法,而不是每像素执行一次

#/usr/bin/env python
类循环生成器:
''为图像生成圆形“遮罩”。
维护平方值的运行计算,以消除乘法“”的需要
定义初始值(self,w,h):
self.image_width=w
self.image_高度=h
#预先计算一些重要值。
#嵌入式设备实际上不必做这样的计算;这个
#编译器在将代码加载到设备上之前执行此操作。
self.half\u image\u width=self.image\u width>>1
self.half\u image\u height=self.image\u height>>1
self.radius=self.half\u图像高度
self.squared_half_image_width=self.half_image_width*self.half_image_width
self.squared_half_image_height=self.half_image_height*self.half_image_height
自平方半径=自半径*自半径
#“delta”是相邻像素索引的平方值之间的差值。
self.initial_x_squared_delta=1-self.image_宽度
self.initial_y_squared_delta=1-self.image_高度
self.resetFrame()
def重置帧(自身):
#从一个白色的二值图像开始
导入图像
self.image=image.new(“1”,(self.image\u宽度,self.image\u高度),1)
self.pixels=self.image.load()
#重置索引
self.resetColumnIndex()
self.resetRowIndex()
def processPixel(自身):
#如果我们在圆圈外,写一个黑色像素
如果self.current_x_平方+self.current_y_平方>self.squared_半径:
self.pixels[(self.current\u column\u index,self.current\u row\u index)]=0
self.updateIndices()
def更新标识(自身):
''更新索引和平方值''
self.incrementColumnIndex()
#如有必要,换行到下一行
如果self.current\u column\u index==self.image\u width:
self.incrementRowIndex()
#如有必要,换行到下一帧
如果self.current\u row\u index==self.image\u height:
self.writeImage()
self.resetFrame()
def incrementColumnIndex(自):
self.current\u column\u index+=1
self.current_x_squared+=self.current_x_squared_delta
自电流_x_平方_δ+=2
def重置列索引(自):
self.current\u column\u index=0
self.current_x_squared=self.squared_半图像宽度
self.current_x_squared_delta=self.initial_x_squared_delta
def增量行索引(自):
“行增量必须将列索引发送回左侧。”
self.resetColumnIndex()
self.current_row_index+=1
self.current_y_squared+=self.current_y_squared_delta
自电流_y_平方_δ+=2
def重置行索引(自):
self.current\u row\u index=0
self.current_y_squared=self.squared_一半图像高度
self.current_y_squared_delta=self.initial_y_squared_delta
def writeImage(自我):
''在当前目录中以PNG格式保存图像''
self.image.save(“output.png”、“png”)
# =============================================================================
def模拟_系统():
图像宽度=800
图像高度=600
#初始化系统
圆形处理器=圆形磁盘生成器(图像宽度、图像高度)
#提供像素流以驱动系统
对于X范围内的i(图像宽度*图像高度):
circle_processor.processPixel()
# =============================================================================
如果名称=“\uuuuu main\uuuuuuuu”:
模拟系统()
此代码创建一个中心圆,如下所示:


下面是一个Python脚本,演示如何在不使用乘法的情况下绘制圆。它使用公式x2+y2>r2检查当前像素位置(x,y)是否在圆外

通过使用加法,可以保持平方值的运行计算,因为。当你在像素中迭代时,你会不断地向你正在运行的“正方形”计算中添加一个数字(称之为“z”),对于每个像素,你也会向“z”中添加2个

下面的
\uuuu init\uuuu
函数确实包含一些乘法运算。但是,如果图像尺寸恒定,编译器将执行乘法运算,并仅将结果加载到设备上。如果图像尺寸不是恒定的,则启动时只需执行一次“慢”乘法,而不是每像素执行一次

#/usr/bin/env python
类循环生成器:
''为图像生成圆形“遮罩”。
维护平方值的运行计算,以消除t