How to adjust panning while zooming
Asked Answered
B

1

0

I want to pan while zooming into a Mandelbrot set so that the fractal portion of the function stays within the window. The code outputs a series of png images to later be made into a video. Right now, I have the zooming and panning working but I do not know how to adjust the panning while the function is zooming.

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)

I can zoom and pan, but how do I automate the panning to stay focused on the fractal? I want to run this code while I am sleeping.

Bladder answered 24/4, 2019 at 13:10 Comment(0)
E
1

I see more ways to achieve this

  1. predetermined location

    Use predetermined path that leads somewhere. But for that you would need to first zoom in manually to some interesting location and then just interpolate position and zoom from start view to target view.

    Of coarse for unknown target location (not precomputed) is this not possible.

    For example try to zoom to this location:

    x  = 0.267334004847543;
    y  =-0.102419298460876;
    

    it is nice spiral like target aligned up to zoom 1.0e14here screenshot:

    spiral fixed position

  2. you can use specific locations in fractal which due to symmetry is always inside fractal ...

    for example center on (-0.75,0.0):

    fixed position fixed position fixed position fixed position

  3. Lock onto some kind of feature and pan it to predetermined location of view

    For example detect area that contains specified ratio between boundary and colored pixels and pan it to some fixed view position (like center or whatever).

    feature

    The feature can be anything but I would advise to avoid shape detection as this kind of fractal tent to change the shape of itself in zooms and pans to wild shapes one would not expect at start...

Elevated answered 27/5, 2019 at 14:8 Comment(2)
Thanks for the response! I have tried the first 2 methods you have mentioned since posting my question. If I wanted to implement a boundary detection system to guide the zoom, how would you suggest I do so? I am unfamiliar with such techniques.Bladder
@Bladder for starters: you search entire image with detector ... so usually for any tested position take all pixels around up to some distance and compute some features from them like min,max intensity, avg intensity, histogram, etc ... then compare to selected feature (from previous frame) an if close enough consider it your feature new position (after zoom change) ... so "center" again and set as new selected feature ...Elevated

© 2022 - 2024 — McMap. All rights reserved.