python - 如何在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
给白点上色,但是如何找到这些点并显示在正方形的顶部?
解决方案
因此,使用meshgrid,使用 的形状,我们首先找到2D 图像中的和值self.im
的坐标。然后,我们找到坐标遵循圆规则 ( ) 的所有值。X
Y
(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()
推荐阅读
- flutter - 如何触发作为 PersistentTabView 屏幕列表 (PersistentTabView) 子级的特定 StatefulWidget 的 didChangeDependencies()
- android - 如何在 Flutter 中提供奖励之前检查用户是否真的邀请朋友使用我的应用程序?
- react-native - 在下拉列表中获取值
- node.js - SendInBlue - sib-api-v3-sdk sendTransacEmail() 返回 403 Forbidden
- node.js - npm start 上的 express 应用程序中出现意外的标识符
- firebase - 消息应用程序中的 Firebase 通知、后台服务和套接字相关问题
- microsoft-graph-api - 如何通过图形 API 分配班次
- c++ - 如何在堆内存 C++ 中初始化通用类型双指针?
- csv - 我在数组中有 10 个 csv 文件,我想使用 perl 对每个 csv 文件的行数
- javascript - 如何在输入类型 =“日期”中隐藏过去的日期