繁体   English   中英

如何在 python 的正方形中画一个圆?

[英]How to draw a circle in a square in python?

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

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")
        

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

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

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

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

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

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

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

在此处输入图像描述

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

所以使用 meshgrid,使用self.im的形状,我们首先找到 2D 图像中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()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM