在 window 中创建坐标查找

Creating a coordinate lookup in a window

我正在使用 PyGame 并尝试创建一个 zoomable/scaleable Mandelbrot 集。我为正方形 windows 设置了此设置,并且在复平面的两个轴上的坐标仅从 -1 到 1。我这样做的方法是为屏幕上的每个像素调用此函数:

#Import pygame and initialize
xSize = 50
ySize = 50
scale = 20
size = width, height = (xSize * scale), (ySize * scale)
screen = pygame.display.set_mode(size)

def getCoords(x, y):
    complexX = (x/((xSize * scale)/2)) - 1
    complexY = (y/((ySize * scale)/2)) - 1
    return complexX, complexY

这是我实际绘制像素的循环:

for y in range(0, (ySize * scale)):
    for x in range(0, (xSize * scale)):
        i = 0
        z = getCoords(x, y)
        complexNum = complex(z[0], z[1])
        zOld = 0
        blowsUp = False
        #Check to see if (z^2 + c) "blows up"
        if blowsUp: 
            screen.set_at((x, y), color1)
        else:
            screen.set_at((x, y), color0)

基本上我想要做的是有两个元组(一个用于 x,一个用于 y),其中包含从复平面绘制的最大值和最小值(即这里我只是绘制1 到 -1 在实轴和虚轴上)。我想这可以通过编辑 getCoords() 函数来完成,但是在对那里的表达式进行大量修改之后,我似乎无法找到正确执行此操作的方法。

我认为您的问题与 pygame 编程的关系不大,实际上主要是数学问题。

如果我已经理解您正在尝试正确执行的操作,那么基本上它相当于在 x 和 y 维度上将 0..scale 的整数范围映射到 ±1.0 内的指定子范围。将其可视化为一个矩形区域或框中 x 和 y 坐标的变换,以便它们适合另一个区域或框的边界。

这里的代码展示了所涉及数学的本质。

(请注意,显示的代码(大部分)遵循 PEP 8 - Style Guide for Python Code,我强烈建议您阅读并开始关注。)

scale = 2
size_x, size_y = 15, 15
subrange_x, subrange_y = (-.20, .20), (-.20, .20)

delta_x, delta_y = (subrange_x[1] - subrange_x[0]), (subrange_y[1] - subrange_y[0])
scale_x, scale_y = (size_x * scale), (size_y * scale)

def get_coords(x, y):
    real = (x/scale_x * delta_x) + subrange_x[0]
    imag = (y/scale_y * delta_y) + subrange_y[0]
    return real, imag

for y in range(scale_y):
    z_values = []
    for x in range(scale_x):
        z = get_coords(x, y)
        complex_num = complex(z[0], z[1])
        z_values.append(f'{complex_num:.2f}')

    print(f'y={y:02}:', ' '.join(z_values))

打印的结果:

y=00: -0.20-0.20j -0.19-0.20j -0.17-0.20j -0.16-0.20j -0.15-0.20j -0.13-0.20j -0.12-0.20j -0.11-0.20j -0.09-0.20j -0.08-0.20j -0.07-0.20j -0.05-0.20j -0.04-0.20j -0.03-0.20j -0.01-0.20j 0.00-0.20j 0.01-0.20j 0.03-0.20j 0.04-0.20j 0.05-0.20j 0.07-0.20j 0.08-0.20j 0.09-0.20j 0.11-0.20j 0.12-0.20j 0.13-0.20j 0.15-0.20j 0.16-0.20j 0.17-0.20j 0.19-0.20j
y=01: -0.20-0.19j -0.19-0.19j -0.17-0.19j -0.16-0.19j -0.15-0.19j -0.13-0.19j -0.12-0.19j -0.11-0.19j -0.09-0.19j -0.08-0.19j -0.07-0.19j -0.05-0.19j -0.04-0.19j -0.03-0.19j -0.01-0.19j 0.00-0.19j 0.01-0.19j 0.03-0.19j 0.04-0.19j 0.05-0.19j 0.07-0.19j 0.08-0.19j 0.09-0.19j 0.11-0.19j 0.12-0.19j 0.13-0.19j 0.15-0.19j 0.16-0.19j 0.17-0.19j 0.19-0.19j
y=02: -0.20-0.17j -0.19-0.17j -0.17-0.17j -0.16-0.17j -0.15-0.17j -0.13-0.17j -0.12-0.17j -0.11-0.17j -0.09-0.17j -0.08-0.17j -0.07-0.17j -0.05-0.17j -0.04-0.17j -0.03-0.17j -0.01-0.17j 0.00-0.17j 0.01-0.17j 0.03-0.17j 0.04-0.17j 0.05-0.17j 0.07-0.17j 0.08-0.17j 0.09-0.17j 0.11-0.17j 0.12-0.17j 0.13-0.17j 0.15-0.17j 0.16-0.17j 0.17-0.17j 0.19-0.17j
y=03: -0.20-0.16j -0.19-0.16j -0.17-0.16j -0.16-0.16j -0.15-0.16j -0.13-0.16j -0.12-0.16j -0.11-0.16j -0.09-0.16j -0.08-0.16j -0.07-0.16j -0.05-0.16j -0.04-0.16j -0.03-0.16j -0.01-0.16j 0.00-0.16j 0.01-0.16j 0.03-0.16j 0.04-0.16j 0.05-0.16j 0.07-0.16j 0.08-0.16j 0.09-0.16j 0.11-0.16j 0.12-0.16j 0.13-0.16j 0.15-0.16j 0.16-0.16j 0.17-0.16j 0.19-0.16j
y=04: -0.20-0.15j -0.19-0.15j -0.17-0.15j -0.16-0.15j -0.15-0.15j -0.13-0.15j -0.12-0.15j -0.11-0.15j -0.09-0.15j -0.08-0.15j -0.07-0.15j -0.05-0.15j -0.04-0.15j -0.03-0.15j -0.01-0.15j 0.00-0.15j 0.01-0.15j 0.03-0.15j 0.04-0.15j 0.05-0.15j 0.07-0.15j 0.08-0.15j 0.09-0.15j 0.11-0.15j 0.12-0.15j 0.13-0.15j 0.15-0.15j 0.16-0.15j 0.17-0.15j 0.19-0.15j
y=05: -0.20-0.13j -0.19-0.13j -0.17-0.13j -0.16-0.13j -0.15-0.13j -0.13-0.13j -0.12-0.13j -0.11-0.13j -0.09-0.13j -0.08-0.13j -0.07-0.13j -0.05-0.13j -0.04-0.13j -0.03-0.13j -0.01-0.13j 0.00-0.13j 0.01-0.13j 0.03-0.13j 0.04-0.13j 0.05-0.13j 0.07-0.13j 0.08-0.13j 0.09-0.13j 0.11-0.13j 0.12-0.13j 0.13-0.13j 0.15-0.13j 0.16-0.13j 0.17-0.13j 0.19-0.13j
y=06: -0.20-0.12j -0.19-0.12j -0.17-0.12j -0.16-0.12j -0.15-0.12j -0.13-0.12j -0.12-0.12j -0.11-0.12j -0.09-0.12j -0.08-0.12j -0.07-0.12j -0.05-0.12j -0.04-0.12j -0.03-0.12j -0.01-0.12j 0.00-0.12j 0.01-0.12j 0.03-0.12j 0.04-0.12j 0.05-0.12j 0.07-0.12j 0.08-0.12j 0.09-0.12j 0.11-0.12j 0.12-0.12j 0.13-0.12j 0.15-0.12j 0.16-0.12j 0.17-0.12j 0.19-0.12j
y=07: -0.20-0.11j -0.19-0.11j -0.17-0.11j -0.16-0.11j -0.15-0.11j -0.13-0.11j -0.12-0.11j -0.11-0.11j -0.09-0.11j -0.08-0.11j -0.07-0.11j -0.05-0.11j -0.04-0.11j -0.03-0.11j -0.01-0.11j 0.00-0.11j 0.01-0.11j 0.03-0.11j 0.04-0.11j 0.05-0.11j 0.07-0.11j 0.08-0.11j 0.09-0.11j 0.11-0.11j 0.12-0.11j 0.13-0.11j 0.15-0.11j 0.16-0.11j 0.17-0.11j 0.19-0.11j
y=08: -0.20-0.09j -0.19-0.09j -0.17-0.09j -0.16-0.09j -0.15-0.09j -0.13-0.09j -0.12-0.09j -0.11-0.09j -0.09-0.09j -0.08-0.09j -0.07-0.09j -0.05-0.09j -0.04-0.09j -0.03-0.09j -0.01-0.09j 0.00-0.09j 0.01-0.09j 0.03-0.09j 0.04-0.09j 0.05-0.09j 0.07-0.09j 0.08-0.09j 0.09-0.09j 0.11-0.09j 0.12-0.09j 0.13-0.09j 0.15-0.09j 0.16-0.09j 0.17-0.09j 0.19-0.09j
y=09: -0.20-0.08j -0.19-0.08j -0.17-0.08j -0.16-0.08j -0.15-0.08j -0.13-0.08j -0.12-0.08j -0.11-0.08j -0.09-0.08j -0.08-0.08j -0.07-0.08j -0.05-0.08j -0.04-0.08j -0.03-0.08j -0.01-0.08j 0.00-0.08j 0.01-0.08j 0.03-0.08j 0.04-0.08j 0.05-0.08j 0.07-0.08j 0.08-0.08j 0.09-0.08j 0.11-0.08j 0.12-0.08j 0.13-0.08j 0.15-0.08j 0.16-0.08j 0.17-0.08j 0.19-0.08j
y=10: -0.20-0.07j -0.19-0.07j -0.17-0.07j -0.16-0.07j -0.15-0.07j -0.13-0.07j -0.12-0.07j -0.11-0.07j -0.09-0.07j -0.08-0.07j -0.07-0.07j -0.05-0.07j -0.04-0.07j -0.03-0.07j -0.01-0.07j 0.00-0.07j 0.01-0.07j 0.03-0.07j 0.04-0.07j 0.05-0.07j 0.07-0.07j 0.08-0.07j 0.09-0.07j 0.11-0.07j 0.12-0.07j 0.13-0.07j 0.15-0.07j 0.16-0.07j 0.17-0.07j 0.19-0.07j
y=11: -0.20-0.05j -0.19-0.05j -0.17-0.05j -0.16-0.05j -0.15-0.05j -0.13-0.05j -0.12-0.05j -0.11-0.05j -0.09-0.05j -0.08-0.05j -0.07-0.05j -0.05-0.05j -0.04-0.05j -0.03-0.05j -0.01-0.05j 0.00-0.05j 0.01-0.05j 0.03-0.05j 0.04-0.05j 0.05-0.05j 0.07-0.05j 0.08-0.05j 0.09-0.05j 0.11-0.05j 0.12-0.05j 0.13-0.05j 0.15-0.05j 0.16-0.05j 0.17-0.05j 0.19-0.05j
y=12: -0.20-0.04j -0.19-0.04j -0.17-0.04j -0.16-0.04j -0.15-0.04j -0.13-0.04j -0.12-0.04j -0.11-0.04j -0.09-0.04j -0.08-0.04j -0.07-0.04j -0.05-0.04j -0.04-0.04j -0.03-0.04j -0.01-0.04j 0.00-0.04j 0.01-0.04j 0.03-0.04j 0.04-0.04j 0.05-0.04j 0.07-0.04j 0.08-0.04j 0.09-0.04j 0.11-0.04j 0.12-0.04j 0.13-0.04j 0.15-0.04j 0.16-0.04j 0.17-0.04j 0.19-0.04j
y=13: -0.20-0.03j -0.19-0.03j -0.17-0.03j -0.16-0.03j -0.15-0.03j -0.13-0.03j -0.12-0.03j -0.11-0.03j -0.09-0.03j -0.08-0.03j -0.07-0.03j -0.05-0.03j -0.04-0.03j -0.03-0.03j -0.01-0.03j 0.00-0.03j 0.01-0.03j 0.03-0.03j 0.04-0.03j 0.05-0.03j 0.07-0.03j 0.08-0.03j 0.09-0.03j 0.11-0.03j 0.12-0.03j 0.13-0.03j 0.15-0.03j 0.16-0.03j 0.17-0.03j 0.19-0.03j
y=14: -0.20-0.01j -0.19-0.01j -0.17-0.01j -0.16-0.01j -0.15-0.01j -0.13-0.01j -0.12-0.01j -0.11-0.01j -0.09-0.01j -0.08-0.01j -0.07-0.01j -0.05-0.01j -0.04-0.01j -0.03-0.01j -0.01-0.01j 0.00-0.01j 0.01-0.01j 0.03-0.01j 0.04-0.01j 0.05-0.01j 0.07-0.01j 0.08-0.01j 0.09-0.01j 0.11-0.01j 0.12-0.01j 0.13-0.01j 0.15-0.01j 0.16-0.01j 0.17-0.01j 0.19-0.01j
y=15: -0.20+0.00j -0.19+0.00j -0.17+0.00j -0.16+0.00j -0.15+0.00j -0.13+0.00j -0.12+0.00j -0.11+0.00j -0.09+0.00j -0.08+0.00j -0.07+0.00j -0.05+0.00j -0.04+0.00j -0.03+0.00j -0.01+0.00j 0.00+0.00j 0.01+0.00j 0.03+0.00j .04+0.00j 0.05+0.00j 0.07+0.00j 0.08+0.00j 0.09+0.00j 0.11+0.00j 0.12+0.00j 0.13+0.00j 0.15+0.00j 0.16+0.00j 0.17+0.00j 0.19+0.00j
y=16: -0.20+0.01j -0.19+0.01j -0.17+0.01j -0.16+0.01j -0.15+0.01j -0.13+0.01j -0.12+0.01j -0.11+0.01j -0.09+0.01j -0.08+0.01j -0.07+0.01j -0.05+0.01j -0.04+0.01j -0.03+0.01j -0.01+0.01j 0.00+0.01j 0.01+0.01j 0.03+0.01j 0.04+0.01j 0.05+0.01j 0.07+0.01j 0.08+0.01j 0.09+0.01j 0.11+0.01j 0.12+0.01j 0.13+0.01j 0.15+0.01j 0.16+0.01j 0.17+0.01j 0.19+0.01j
y=17: -0.20+0.03j -0.19+0.03j -0.17+0.03j -0.16+0.03j -0.15+0.03j -0.13+0.03j -0.12+0.03j -0.11+0.03j -0.09+0.03j -0.08+0.03j -0.07+0.03j -0.05+0.03j -0.04+0.03j -0.03+0.03j -0.01+0.03j 0.00+0.03j 0.01+0.03j 0.03+0.03j 0.04+0.03j 0.05+0.03j 0.07+0.03j 0.08+0.03j 0.09+0.03j 0.11+0.03j 0.12+0.03j 0.13+0.03j 0.15+0.03j 0.16+0.03j 0.17+0.03j 0.19+0.03j
y=18: -0.20+0.04j -0.19+0.04j -0.17+0.04j -0.16+0.04j -0.15+0.04j -0.13+0.04j -0.12+0.04j -0.11+0.04j -0.09+0.04j -0.08+0.04j -0.07+0.04j -0.05+0.04j -0.04+0.04j -0.03+0.04j -0.01+0.04j 0.00+0.04j 0.01+0.04j 0.03+0.04j 0.04+0.04j 0.05+0.04j 0.07+0.04j 0.08+0.04j 0.09+0.04j 0.11+0.04j 0.12+0.04j 0.13+0.04j 0.15+0.04j 0.16+0.04j 0.17+0.04j 0.19+0.04j
y=19: -0.20+0.05j -0.19+0.05j -0.17+0.05j -0.16+0.05j -0.15+0.05j -0.13+0.05j -0.12+0.05j -0.11+0.05j -0.09+0.05j -0.08+0.05j -0.07+0.05j -0.05+0.05j -0.04+0.05j -0.03+0.05j -0.01+0.05j 0.00+0.05j 0.01+0.05j 0.03+0.05j 0.04+0.05j 0.05+0.05j 0.07+0.05j 0.08+0.05j 0.09+0.05j 0.11+0.05j 0.12+0.05j 0.13+0.05j 0.15+0.05j 0.16+0.05j 0.17+0.05j 0.19+0.05j
y=20: -0.20+0.07j -0.19+0.07j -0.17+0.07j -0.16+0.07j -0.15+0.07j -0.13+0.07j -0.12+0.07j -0.11+0.07j -0.09+0.07j -0.08+0.07j -0.07+0.07j -0.05+0.07j -0.04+0.07j -0.03+0.07j -0.01+0.07j 0.00+0.07j 0.01+0.07j 0.03+0.07j 0.04+0.07j 0.05+0.07j 0.07+0.07j 0.08+0.07j 0.09+0.07j 0.11+0.07j 0.12+0.07j 0.13+0.07j 0.15+0.07j 0.16+0.07j 0.17+0.07j 0.19+0.07j
y=21: -0.20+0.08j -0.19+0.08j -0.17+0.08j -0.16+0.08j -0.15+0.08j -0.13+0.08j -0.12+0.08j -0.11+0.08j -0.09+0.08j -0.08+0.08j -0.07+0.08j -0.05+0.08j -0.04+0.08j -0.03+0.08j -0.01+0.08j 0.00+0.08j 0.01+0.08j 0.03+0.08j 0.04+0.08j 0.05+0.08j 0.07+0.08j 0.08+0.08j 0.09+0.08j 0.11+0.08j 0.12+0.08j 0.13+0.08j 0.15+0.08j 0.16+0.08j 0.17+0.08j 0.19+0.08j
y=22: -0.20+0.09j -0.19+0.09j -0.17+0.09j -0.16+0.09j -0.15+0.09j -0.13+0.09j -0.12+0.09j -0.11+0.09j -0.09+0.09j -0.08+0.09j -0.07+0.09j -0.05+0.09j -0.04+0.09j -0.03+0.09j -0.01+0.09j 0.00+0.09j 0.01+0.09j 0.03+0.09j 0.04+0.09j 0.05+0.09j 0.07+0.09j 0.08+0.09j 0.09+0.09j 0.11+0.09j 0.12+0.09j 0.13+0.09j 0.15+0.09j 0.16+0.09j 0.17+0.09j 0.19+0.09j
y=23: -0.20+0.11j -0.19+0.11j -0.17+0.11j -0.16+0.11j -0.15+0.11j -0.13+0.11j -0.12+0.11j -0.11+0.11j -0.09+0.11j -0.08+0.11j -0.07+0.11j -0.05+0.11j -0.04+0.11j -0.03+0.11j -0.01+0.11j 0.00+0.11j 0.01+0.11j 0.03+0.11j 0.04+0.11j 0.05+0.11j 0.07+0.11j 0.08+0.11j 0.09+0.11j 0.11+0.11j 0.12+0.11j 0.13+0.11j 0.15+0.11j 0.16+0.11j 0.17+0.11j 0.19+0.11j
y=24: -0.20+0.12j -0.19+0.12j -0.17+0.12j -0.16+0.12j -0.15+0.12j -0.13+0.12j -0.12+0.12j -0.11+0.12j -0.09+0.12j -0.08+0.12j -0.07+0.12j -0.05+0.12j -0.04+0.12j -0.03+0.12j -0.01+0.12j 0.00+0.12j 0.01+0.12j 0.03+0.12j 0.04+0.12j 0.05+0.12j 0.07+0.12j 0.08+0.12j 0.09+0.12j 0.11+0.12j 0.12+0.12j 0.13+0.12j 0.15+0.12j 0.16+0.12j 0.17+0.12j 0.19+0.12j
y=25: -0.20+0.13j -0.19+0.13j -0.17+0.13j -0.16+0.13j -0.15+0.13j -0.13+0.13j -0.12+0.13j -0.11+0.13j -0.09+0.13j -0.08+0.13j -0.07+0.13j -0.05+0.13j -0.04+0.13j -0.03+0.13j -0.01+0.13j 0.00+0.13j 0.01+0.13j 0.03+0.13j 0.04+0.13j 0.05+0.13j 0.07+0.13j 0.08+0.13j 0.09+0.13j 0.11+0.13j 0.12+0.13j 0.13+0.13j 0.15+0.13j 0.16+0.13j 0.17+0.13j 0.19+0.13j
y=26: -0.20+0.15j -0.19+0.15j -0.17+0.15j -0.16+0.15j -0.15+0.15j -0.13+0.15j -0.12+0.15j -0.11+0.15j -0.09+0.15j -0.08+0.15j -0.07+0.15j -0.05+0.15j -0.04+0.15j -0.03+0.15j -0.01+0.15j 0.00+0.15j 0.01+0.15j 0.03+0.15j 0.04+0.15j 0.05+0.15j 0.07+0.15j 0.08+0.15j 0.09+0.15j 0.11+0.15j 0.12+0.15j 0.13+0.15j 0.15+0.15j 0.16+0.15j 0.17+0.15j 0.19+0.15j
y=27: -0.20+0.16j -0.19+0.16j -0.17+0.16j -0.16+0.16j -0.15+0.16j -0.13+0.16j -0.12+0.16j -0.11+0.16j -0.09+0.16j -0.08+0.16j -0.07+0.16j -0.05+0.16j -0.04+0.16j -0.03+0.16j -0.01+0.16j 0.00+0.16j 0.01+0.16j 0.03+0.16j 0.04+0.16j 0.05+0.16j 0.07+0.16j 0.08+0.16j 0.09+0.16j 0.11+0.16j 0.12+0.16j 0.13+0.16j 0.15+0.16j 0.16+0.16j 0.17+0.16j 0.19+0.16j
y=28: -0.20+0.17j -0.19+0.17j -0.17+0.17j -0.16+0.17j -0.15+0.17j -0.13+0.17j -0.12+0.17j -0.11+0.17j -0.09+0.17j -0.08+0.17j -0.07+0.17j -0.05+0.17j -0.04+0.17j -0.03+0.17j -0.01+0.17j 0.00+0.17j 0.01+0.17j 0.03+0.17j 0.04+0.17j 0.05+0.17j 0.07+0.17j 0.08+0.17j 0.09+0.17j 0.11+0.17j 0.12+0.17j 0.13+0.17j 0.15+0.17j 0.16+0.17j 0.17+0.17j 0.19+0.17j
y=29: -0.20+0.19j -0.19+0.19j -0.17+0.19j -0.16+0.19j -0.15+0.19j -0.13+0.19j -0.12+0.19j -0.11+0.19j -0.09+0.19j -0.08+0.19j -0.07+0.19j -0.05+0.19j -0.04+0.19j -0.03+0.19j -0.01+0.19j 0.00+0.19j 0.01+0.19j 0.03+0.19j 0.04+0.19j 0.05+0.19j 0.07+0.19j 0.08+0.19j 0.09+0.19j 0.11+0.19j 0.12+0.19j 0.13+0.19j 0.15+0.19j 0.16+0.19j 0.17+0.19j 0.19+0.19j