User:Decimus Schomer/Scripts/Fractal viewer
From The Schommunity Wiki
Decimus' user page | Decimus' talk page | Decimus' scripts | Decimus' script libraries | Decimus' projects
Main scripts page | Toggling Rotate script | UUID-getter scripts | Texture changer | Channel spier | Chatbot | Jump slab | Emailer | Fractal viewer | Grammar analyser | SPD viewer
About
This script, written by Decimus, is a basic fractal viewer, with a simple 'zoom'-like feature and easily customisable fractal and colouring.
To run this, you will need Python and Pygame.
Comments will be added later.
The script
# Fractal viewer - display and zoom a fractal
# Copyright (C) 2007 Decimus Schomer
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
# (you can find version 2 of the GPL at http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
import pygame, math
pygame.init()
psz = 1. / (1 << 3)
sd = 512
sc = pygame.display.set_mode((sd, sd))
pygame.event.set_allowed(None)
pygame.event.set_allowed(pygame.QUIT)
def n2c(a):
b, c, d = a & 255, (a >> 8) & 255, (a >> 16) & 255
return b, c, d
def getpx(x, y):
ox, oy = x, y
i = 0
while ((x*x) + (y*y) < 4096) and (i < 255):
x += 1 + (x*y) - (ox*oy)
y -= x
i += 1
return (i, 0, 0)
def drawpx(x, y):
xc = (x - sd//2) * psz
yc = (sd//2 - y) * psz
c = getpx(xc, yc)
sc.set_at((x, y), c)
xp = yp = 0
while 1:
if pygame.event.get(pygame.QUIT):
break
drawpx(xp, yp)
xp += 1
if xp == sd:
pygame.display.update((0, yp, sd, 1))
xp = 0
yp += 1
if yp == sd:
psz /= 2
xp = yp = 0