Python Forum

Full Version: Dynamic pixel display
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am developing a relatively simple program in Python to allow students to explore recurrence relations of the form x(n+1) = (1+b)F(xn) – bx(n-1). The results are ‘dust’ type fractals based on work by Gumowski and Mira. Each iteration of the function generates a single (x,y) point

The code generating iterations is relatively trivial. However, as a newcomer to Python I am looking for the most efficient method that enables students to see how the iterations (orbits) evolve on screen, iteration by iteration, pixel by pixel.

I have already looked at Pillow and matplotlib but neither option provides the dynamic display I am looking for. The code extract below (without additional user interface details) shows an example using matplotlib. A friend has suggested using Pygame but commented that it can be quite slow to update for large numbers of pixels.

Does anyone have any better suggestions for a non-expert before I investigate using Pygame gfx?

#mira exmple using matplotlib to visualise static result
import matplotlib.pyplot as plt

#initialise base parameters
a = 0.5
b = 0.998

#set starting point
x = 0
y = 12.1

#set level of iterations
p = 10000

#initialise arrays for holding x , y results
x_plot = [0]
y_plot = [12.1]

#define f(x) and generate starting value
f = (a*x + ((2-2*a)*x**2))/(1+x**2)

for n in range(0,p):
    z = x
    x = b*y + f
    f =  (a*x + ((2-2*a)*x**2))/(1+x**2)
    y = f - z

    x_plot.append(x)
    y_plot.append(y)

plt.style.use('classic')
fig, ax = plt.subplots()
ax.scatter(x_plot, y_plot, s = 1)
plt.show()
In matplotlib you would use animation to have a dynamic display
Thanks deanhystad

I hadn't considered animation in matplotlib as I was trying to avoid storing large data sets for plotting and also wasn't sure I could get the required individual pixel resolution.

However, as I am only just starting to use Python I will go and take another look.

Regards
Jerry