首页 > 解决方案 > 如何在python中在正方形中画一个圆?

问题描述

我有以下Canvas类用于在给定像素中绘制颜色:

class Canvas:
    def __init__(self,color,pixel):
        self.color = color
        self.pixel = pixel
        
        self.im = np.zeros((pixel,pixel,3))
        self.im[:,:] = color
        
    def show(self):
        plt.imshow(self.im)
        plt.axis("off")
        

这个简单的类用颜色绘制一个正方形,例如:

purple = np.array([0.5, 0.0, 0.5])
C = Canvas(purple, 2001) # 2001 x 2001 pixels
C.show()

呈现: 在此处输入图像描述

我想add_disk()用三个参数创建函数:centroid,radius,color. 以便

C.add_disk((1001, 1001), 500, white)
C.show()

呈现:在此处输入图像描述

但是,我不确定如何使用数学公式来做到这一点:

在此处输入图像描述

我想我可以用来np.meshgrid给白点上色,但是如何找到这些点并显示在正方形的顶部?

标签: pythonnumpy

解决方案


因此,使用meshgrid,使用 的形状,我们首先找到2D 图像中的和值self.im的坐标。然后,我们找到坐标遵循圆规则 ( ) 的所有值。XY(X - Ox) ** 2 + (Y - Oy)**2 <= R**2

import matplotlib.pyplot as plt
import numpy as np

class Canvas:
    def __init__(self,color,pixel):
        self.color = color
        self.pixel = pixel
        
        self.im = np.zeros((pixel,pixel,3))
        self.im[:,:] = color
        
    def show(self):
        plt.imshow(self.im)
        plt.axis("off")
    
    def add_disk(self, centroid,radius,color):
        x, y = np.meshgrid(np.arange(self.im.shape[0]), np.arange(self.im.shape[1]))
        circle_pixels = (x - centroid[0]) ** 2 + (y - centroid[1]) ** 2 <= radius ** 2
        self.im[circle_pixels, ...] = color

purple = np.array([0.5, 0.0, 0.5])
C = Canvas(purple, 2001) # 2001 x 2001 pixels
C.show()       

white = np.array([255, 255, 255])
C.add_disk((1001, 1001), 500, white)
C.show()

在此处输入图像描述


推荐阅读