Как настроить панорамирование при масштабировании - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу панорамировать при увеличении набора Мандельброта, чтобы фрактальная часть функции оставалась в пределах окна.Код выводит серию изображений PNG для последующего превращения в видео.Сейчас у меня работает масштабирование и панорамирование, но я не знаю, как настроить панорамирование, когда функция масштабирования.

import numpy as np
import matplotlib.pyplot as plt
from os import path

#6:36 @2560x1440 500 iter
#2:51 @2560x1440 200 iter
#0:56 @2560x1440 50 iter
#1:35 @2560x1440 100 iter
#0:53 @1920x1080 100 iter
#0:24 @1280x720  100 iter -> run overnight to generate 1000pngs
#make a video out of images in blender

#resolution
col=720
rows=1280

#initial window
x1=0.24#-0.78#-2#this initial window captures the whole Mandelbrot
x2=0.39#-0.73#1
y1=-0.1#0.03#-1
y2=0.08#0.13#1
#DON'T FORGET TO CHANGE THE OUTPATH!!!
outpath='C:\Users\yourfilepath\Seahorse valley'
#run at n=1000 overnight
for k in range(3): #generates n images (WARNING: this can take a while for n>5 at high res)
    zoom=0.1
    def mandelbrot(x,c,maxiter):
        c=complex(x,c) #x+ci
        z=0.0j #j is python for imaginary numbers (i)

        for i in range(maxiter):
           z=z**2+c #change power of z to generate other epicycloids 
           if(z.real*z.real+z.imag*z.imag)>=4:
               return i
        return maxiter

    result=np.zeros([rows,col])
    for rowindex, x in enumerate(np.linspace(x1,x2,num=rows)):
        for colindex, c in enumerate(np.linspace(y1,y2,num=col)):
            result[rowindex,colindex]=mandelbrot(x,c,40)

    plt.figure()
    plt.imshow(result.T, cmap='jet_r') #[x1,x2,y1,y2])
    plt.title('Mandelbrot')
    plt.xlabel('Real C')
    plt.ylabel('Complex C')
    plt.savefig(path.join(outpath,'Seahorse {0}.png'.format(k)),dpi=1000)

    #zooms in for the next image.
    x1=x1+zoom #Change the zoom per iteration
    x2=x2-zoom #changing individial values allows for panning
    y1=y1+zoom #need to figure out how to adjust pan to stay on fractal
    y2=y2-zoom
    zoom+=zoom/2

#elephant valley coordinates in here
#(0.24,0.39,num=rows)
#(-0.1,0.08,num=col)

#coords for seahorse valley
#(-0.78,-0.73,num=rows)
#(0.03,0.13,num=col)

Я могу масштабировать и панорамировать, но как мне автоматизировать панорамирование, чтобы оставаться сфокусированным на фрактале?Я хочу запустить этот код, пока я сплю.

1 Ответ

0 голосов
/ 27 мая 2019

Я вижу больше способов достичь этого

  1. заданное местоположение

    Используйте заранее определенный путь, который ведет куда-то. Но для этого вам нужно будет сначала увеличить вручную какое-то интересное место, а затем просто интерполировать положение и увеличить масштаб от начального вида до целевого вида.

    Грубое для неизвестного местоположения цели (предварительно не вычислено) это невозможно.

    Например, попробуйте увеличить это местоположение:

    x  = 0.267334004847543;
    y  =-0.102419298460876;
    

    это милая спираль, похожая на цель, выровненная для увеличения 1.0e14 вот скриншот:

    spiral fixed position

  2. вы можете использовать определенные места во фрактале, которые из-за симметрии всегда находятся внутри фрактала ...

    например центр по (-0.75,0.0):

    fixed position fixed position fixed position fixed position

  3. Блокировка какой-либо функции и ее панорамирование в заранее определенном месте просмотра

    Например, определить область, которая содержит заданное соотношение между граничными и цветными пикселями, и переместить ее в какое-то фиксированное положение вида (например, в центр или где-либо еще).

    feature

    Эта функция может быть любой, но я бы посоветовал избегать обнаружения формы, так как этот вид фрактальной палатки изменяет форму самого себя в масштабах и панорамировании на дикие формы, которые не ожидаются при запуске ...

...