Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 像素网格中的圆_Python_Numpy_Graphics - Fatal编程技术网

Python 像素网格中的圆

Python 像素网格中的圆,python,numpy,graphics,Python,Numpy,Graphics,给定中心(x,y)和半径r,如何使用python在像素网格中绘制圆C((x,y,r)?可以假设像素网格足够大。这是Python中的Rosetta代码 def circle(self, x0, y0, radius, colour=black): f = 1 - radius ddf_x = 1 ddf_y = -2 * radius x = 0 y = radius self.set(x0, y0 + radius, colour) sel

给定中心
(x,y)
和半径
r
,如何使用python在像素网格中绘制圆
C((x,y,r)
?可以假设像素网格足够大。

这是Python中的Rosetta代码

def circle(self, x0, y0, radius, colour=black):
    f = 1 - radius
    ddf_x = 1
    ddf_y = -2 * radius
    x = 0
    y = radius
    self.set(x0, y0 + radius, colour)
    self.set(x0, y0 - radius, colour)
    self.set(x0 + radius, y0, colour)
    self.set(x0 - radius, y0, colour)

    while x < y:
      if f >= 0: 
        y -= 1
        ddf_y += 2
        f += ddf_y
        x += 1
        ddf_x += 2
        f += ddf_x    
        self.set(x0 + x, y0 + y, colour)
        self.set(x0 - x, y0 + y, colour)
        self.set(x0 + x, y0 - y, colour)
        self.set(x0 - x, y0 - y, colour)
        self.set(x0 + y, y0 + x, colour)
        self.set(x0 - y, y0 + x, colour)
        self.set(x0 + y, y0 - x, colour)
        self.set(x0 - y, y0 - x, colour)
        Bitmap.circle = circle

        bitmap = Bitmap(25,25)
        bitmap.circle(x0=12, y0=12, radius=12)
        bitmap.chardisplay()
def圆(自身、x0、y0、半径、颜色=黑色):
f=1-半径
ddf_x=1
ddf_y=-2*半径
x=0
y=半径
自我设置(x0,y0+半径,颜色)
自我设置(x0,y0-半径,颜色)
自设置(x0+半径,y0,颜色)
自我设置(x0-半径,y0,颜色)
当x=0:
y-=1
ddf_y+=2
f+=ddf_y
x+=1
ddf_x+=2
f+=ddf_x
自我设置(x0+x,y0+y,颜色)
自我设定(x0-x,y0+y,彩色)
自组(x0+x,y0-y,彩色)
自我设定(x0-x,y0-y,彩色)
自组(x0+y,y0+x,彩色)
自组(x0-y,y0+x,彩色)
自组(x0+y,y0-x,彩色)
自组(x0-y,y0-x,彩色)
位图.circle=圆
位图=位图(25,25)
圆(x0=12,y0=12,半径=12)
位图.chardisplay()
假设您想完成任务(而不是学习光栅图形算法),只需使用:

输出:

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
范围为0..255,因为即使对于每像素1位的图像,枕头也会每像素存储一个字节(因为它效率更高)

如果希望范围为0..1,则可以除以255:

[x/255 for x in image.getdata()]

要输出图像文件还是创建交互式应用程序?如果它是交互式的,是用于数据可视化还是游戏?@goncalopp我想要一个包含
0
1
的2D数组,这样
1
表示圆的位置。请查看。如果您在实现细节方面遇到困难,请告诉我们。@Falko非常感谢。如果您想获得灵感并画一个平滑的圆,请查看。该站点上的代码是用Pascal编写的,但要翻译成Python看起来并不难。Wu的线算法是绘制抗锯齿线的标准;他的圆圈算法不太为人所知。最好让链接文本更有意义,以防止链接腐烂。例如“这是Python中的Rosetta代码”。没错,rosettacode是一个相当稳定的网站,但你永远不知道。。。进入堆栈交换站点是一个好习惯。@PM2Ring感谢您的评论。我会解决它。如果我想在matplotlib上实现它呢?
[x/255 for x in image.getdata()]