我想制作一个内半径r1
和外半径r2
的环的图像,其值由余弦调制。
我已经这样做了,并尝试了几个选项(代码中的注释):
import numpy as np
import matplotlib.pyplot as plt
def circle(x_center,y_center,r):
# theta = np.linspace(0, 2*np.pi, 500)
# x = r*np.cos(theta) - x_center
# y = r*np.sin(theta) - y_center
xv = np.linspace(-r-1,r+1,500)
X,Y = np.meshgrid(xv, xv)
profilegrid = np.ones(X.shape, float)
for i, a in enumerate(X[0, :]):
for k, z in enumerate(Y[:, 0]):
theta = np.arctan(z/a)
current_radius = np.sqrt(a**2 + z**2)
cond1 = current_radius <= r
# cond2 = np.logical_and(np.abs(theta)>=0,np.abs(theta)<=pi)
cond2 = a==a
if np.logical_and(cond1,cond2)==False :
profilegrid[i, k] = 0
else :
profilegrid[i, k] = np.cos(theta)
return xv,profilegrid
xv1,circle_big = circle(0,0,1)
xv2,circle_small = circle(0,0,0.5)
new = circle_big - circle_small
plt.imshow(new, interpolation="bicubic",
origin="lower", extent=[min(xv1),max(xv1),min(xv1),max(xv1)])
plt.colorbar()
plt.show()
但是输出图像给了我:
我的值应该在-1
和1
之间,而不是在0
和1
之间。此外,正如你所看到的,我要求将一个半径为r1=1
的圆减去一个半径为r2=0.5
的圆,以模拟圆环,但这个圆似乎要大一点
你知道这些问题的由来吗
编辑:
由于@tgrtim:
xv = np.linspace(-r-1,r+1,500)
应固定并替换为:
xv = np.linspace(-2,2,500)
此外,值间隔[0:1]
而不是[-1:1]
的问题来自arctan
边界。那么你知道如何改变它,只有一个最大值,没有像这样的镜像模式吗
镜像模式的问题可以通过函数
math.atan2(y,x)
而不是np.arctan(y/x)
来解决相关问题 更多 >
编程相关推荐