余弦调制的二维环

2024-05-18 08:44:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想制作一个内半径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

我的值应该在-11之间,而不是在01之间。此外,正如你所看到的,我要求将一个半径为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边界。那么你知道如何改变它,只有一个最大值,没有像这样的镜像模式吗


Tags: 图像importnp半径pltcenterr2r1