Python-圆形图案

时间:2018-11-22 01:35:18

标签: python matrix

我想通过将特定位置从0更改为1来在零矩阵中创建一个圆。不幸的是,我的if语句出了点问题,我无法弄清楚。感谢您的帮助!

img = np.zeros((20,20))
def convert2file(image, newfile):
    img = Image.new('RGB', (len(image), len(image[0])), "black")
    pixels = img.load()

    for i in range(len(image)):
        for j in range (len(image[i])):
            if image[i][j] == 0:
                pixels[j,i] = black
            else:
                pixels[j,i] = white


    save2file(img, newfile)
def gen_circle(image):
    ret = np.copy(image)
    for i in range(len(image)):
        for j in range(len(image[i])):
            if fabs((j - len(image)/2)**2 + (i - len(image)/2)**2  - len(image)/2**2) == 0.5**2:
                ret[i][j] = 1
    return ret

draw_pic(gen_circle(img))

2 个答案:

答案 0 :(得分:0)

该代码如何:

def gen_circle(image):
    ret = np.copy(image)
    radius = len(image)/2
    radius_sq = radius**2
    for i in range(len(image)):
        for j in range(len(image[i])):
            if (i-radius)**2 + (j-radius)**2 <= radius_sq:
                ret[i][j] = 1
    return ret

答案 1 :(得分:0)

由于以下几个原因,您需要修正计算结果:

很难进行任意计算以匹配浮点值

几乎所有的计算结果都大于0(有些甚至超过100),因此大部分将等于false

ij的值不平衡(因为您从0开始并在19结束)

您需要选择一个任意值作为条件(通过查看每个计算结果或通过反复试验),并使条件小于该值(以填充圆圈)。

import numpy as np
from math import fabs

img = np.zeros((20,20))

def gen_circle(image):
    ret = np.copy(image)
    for i in range(len(image)):
        for j in range(len(image[i])):
            if fabs((j + 0.5 - len(image)/2)**2 + (i + 0.5 - len(image)/2)**2  - len(image)/2**2) <= 86:
                ret[i][j] = 1
    return ret

print(gen_circle(img))