Python масштабирование перевода относительно центра экрана - PullRequest
0 голосов
/ 01 февраля 2020

Я чувствую, что это действительно простой вопрос, однако мой мозг не работает. У меня есть скрипт, который генерирует набор Мандельброта в терминале python. Проблема в том, что я пытаюсь добавить возможность выполнять простые переводы в набор (перейти к x, перейти к y и увеличить), а при выполнении маневра масштабирования / масштабирования экран масштабируется относительно угла (0,0i или где бы ни находился экран), а не центр экрана, где я хочу, чтобы он был.

Строка, имеющая отношение к шкале, это строки 40 и 41 (c = (float (b) / zoom) + ax & d = (плавать (a) / увеличить) + ay). Также обратите внимание, что 0,0i на моем дисплее не соответствует точке 0,0i на реальном наборе Мандельброта (и все другие точки смещены), но по какой-то причине находится где-то дальше влево. (Я новичок в программировании). Если вы можете помочь мне с проблемой масштабирования или, возможно, большим смещением.

Наконец, если вы пытаетесь запустить это на своем компьютере, по умолчанию используется масштаб 30, x равен -3, а y равен -1. Просто введите это, когда он предложит вам, и он будет работать.

import math
zoom = 30
x = -3
y = -0.8
print('zoom: ',zoom)
print('x: ',x)
print('y: ',y)
#<-- (-), (+)-->
def test(num): #  <---- test if complex number is in Mandelbrot set
    is_true = '#' #<---- if it is, it will return a # to fill the grid space, otherwise, it's a space (blank)
    z = 0
    for i in range(100):
        z = (z ** 2) + num
        if z.real > 100:
            is_true = " "
            break
        if z.imag > 2000:
            is_true = " "
            break
        if z.imag < -2000:
            is_true = " "
            break
    return is_true
def update(zoom, ax, ay):  #<-- function will run through grid spaces and test if their in the Mandelbrot set
    for a in range(63):
        print(a)
        #print("/n")
        for b in range(115): #               <-------- pixel / grid of display area
            if a == round(63/2):
                if b == round(115/2):
                    print('^'),
                    continue
            c = (float(b)/zoom) + ax #- 1.3  <--|----- SCALE SCRIPTS
            d = (float(a)/zoom) + ay #- 3    <--'

            print(test(complex(c, d))), #    <------- display text (output)
    print('zoom: ',zoom)
    print('x: ',ax)
    print('y: ',ay)
while  True:
    update(float(raw_input('zoom: ')),float(raw_input('x: ')),float(raw_input('y: ')))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...