以像素为单位在python中绘制圆圈

时间:2017-07-13 19:04:43

标签: python-3.x geometry pixels

嘿伙计,所以我有一个问题。我想逐像素地在python中绘制一个圆圈,但我似乎无法得到它。

这是我们今天在编程课上谈到的一个问题,我的老师说通过使用距离公式来找到窗口中心和圆圈外面的点之间的距离然后只是告诉它是可能的。如果适合那种情况,填写它的程序。

所以这不是作业,纯粹是为了我自己的好奇心。我已经工作了几个小时,我觉得我很接近,但肯定错过了一个关键因素。

我的目标是在窗口中间放一个红色圆圈,其宽度和高度在300到400之间。

我说中心点是=到(w / 2,h / 2),我想填补距离那个固定距离的每个点。

我选择(100,50)作为随机点将在圆上,然后使用前两个点将变量distance =设置为距离公式。

两个for循环用于迭代窗口中的每个像素。我能够在我想要我的圆圈的地方创建一个盒子......但我似乎无法接近圆圈出现

这是我的代码,我将我的函数命名为日本国旗,因为它似乎合适:

import cImage
import math


def japanese_flag(w, h):
    newimg = EmptyImage(w, h)
    distance = int(math.sqrt((50 - h / 2) ** 2 + (100 - w / 2) ** 2))

    for col in range(w):
        for row in range(h):
            if h/2 - distance < row < (h/2 + distance) and w / 2 - distance < col < (w / 2 + distance):
                    newpixel = Pixel(255, 0, 0) # this denotes the color red
                    newimg.setPixel(col, row, newpixel)
    return newimg

def show_one_flag(func_name):
    import random
    width = random.randint(300, 400)
    height = random.randint(200, 300)
    win = ImageWin(str(func_name),width,height)
    newimg = func_name(width, height)
    newimg.draw(win)

show_one_flag(japanese_flag)

1 个答案:

答案 0 :(得分:2)

使用平方半径进行简单比较

SqDist = (50 - h / 2) ** 2 + (100 - w / 2) ** 2

仅绘制圆周,与某个容差水平进行比较

Eps = 1
...
if (Math.Abs((h/2 - row) ** 2 + (w/2 - col) ** 2 - SqDist) < Eps)
     draw pixel

绘制实心圆圈:

if ((h/2 - row) ** 2 + (w/2 - col) ** 2 < SqDist)
     draw pixel