Bestand:Arnold's Cat Map animation (74px, zoomed, labelled).gif

Pagina-inhoud wordt niet ondersteund in andere talen.
Uit Wikipedia, de vrije encyclopedie

Arnold's_Cat_Map_animation_(74px,_zoomed,_labelled).gif(224 × 263 pixels, bestandsgrootte: 1,95 MB, MIME-type: image/gif, herhalend, 117 frames, 47 s)


Beschrijving
English: Animation of Arnold's cat map (zoomed 3 times to make the pixels clearer, and labelled with the iteration number), using an image of cherries as the starting image. The image is 74 pixels square, and repeats after 114 iterations. Notice how the image sometimes contains superimposed cherries, many tiny cherries or a single perfectly reproduced but upside-down image.
Datum
Bron

Eigen werk

Used File:Cherry Stella444.jpg as the starting image
Auteur Inductiveload
Toestemming
(Hergebruik van dit bestand)
w:nl:Creative Commons
naamsvermelding Gelijk delen
Dit bestand is gelicenseerd onder de Creative Commons-licentie Naamsvermelding-Gelijk delen 3.0 Unported
De gebruiker mag:
  • Delen – het werk kopiëren, verspreiden en doorgeven
  • Remixen – afgeleide werken maken
Onder de volgende voorwaarden:
  • naamsvermelding – U moet op een gepaste manier aan naamsvermelding doen, een link naar de licentie geven, en aangeven of er wijzigingen in het werk zijn aangebracht. U mag dit op elke redelijke manier doen, maar niet zodanig dat de indruk wordt gewekt dat de licentiegever instemt met uw werk of uw gebruik van zijn werk.
  • Gelijk delen – Als u het werk heeft geremixt, veranderd, of erop heeft voortgebouwd, moet u het gewijzigde materiaal verspreiden onder dezelfde licentie als het oorspronkelijke werk, of een daarmee compatibele licentie.
Andere versies

Python source code

#!/usr/bin/env python
#-*- coding:utf-8 -*-
 
import Image #needs PIL for image handling
import ImageChops
import ImageFont
import ImageDraw
 
# checks if two images are equal
def equal(im1, im2):
    return ImageChops.difference(im1, im2).getbbox() is None
 
# add a text caption to an image (adds space at the bottom)
def addCaption(im, text, pointSize):
    size = im.size
    draw = ImageDraw.Draw(im)
 
    textFontLocation = "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf"
    topBottomMargin = 5
 
    textFont = ImageFont.truetype(textFontLocation ,pointSize)
    textSize = draw.textsize(text, font=textFont) # the size of the text box!
 
    newImage = Image.new(im.mode,\
            (im.size[0], im.size[1]+textSize[1]+2*topBottomMargin), "white" )
    newImage.paste( im, (0,0) )
    draw = ImageDraw.Draw(newImage)
 
    textX = (newImage.size[0] / 2.0) - (textSize[0] / 2.0)
    textY = newImage.size[1] - textSize[1] - topBottomMargin
 
    draw.text((textX, textY), text, fill="black", font=textFont)
    return newImage
 
# add a solid border to an image
def addBorder(im, color, thickness):
    newImage = Image.new(im.mode,\
            (im.size[0]+thickness*2, im.size[1]+thickness*2), color)
    newImage.paste( im, (1,1) )
    return newImage
 
# scale an image up or down (doesn't resample, so the pixels are clear)
def scaleImage(im, factor):
    newImage = Image.new(im.mode,\
            (im.size[0]*factor, im.size[1]*factor), "white" )
    newImage.paste( im.transform((im.size[0]*factor, im.size[1]*factor),\
            Image.AFFINE,\
            (1/float(factor),0,0,0,1/float(factor),0) ),\
            (0,0) )
    return newImage
 
def saveImages(im, iteration):
    im.save("Catmap%04d.png"%iteration) #save the simple image
 
    #resize image, add border and caption
    imageLarge = scaleImage(im, 6)
    imageLarge = addBorder(imageLarge, "black", 1)
    imageLarge = addCaption(imageLarge, str(iteration), 40)
    imageLarge.save("CatmapLargeNumbered%04d.png"%iteration)
 
# CONTROL STARTS HERE
 
inFile = "aa-catmap-orig.resized.jpg" #input image
 
image0 = Image.open(inFile, 'r')
 
#crop to square if required
if image0.size[0] != image0.size[1]:
    n = min(image0.size[0], image0.size[1] )
    image0 = image0.crop((0,0,n,n))
else:
    n = image0.size[0]
 
imageOrig = image0.copy() # keep to original image to see when we return to it
 
image1 = Image.new(image0.mode, (n,n)) # temp image to copy pixels to
pixels1 = image1.load()
 
# BEGIN THE CAT MAPPING PROCESS
 
iteration = 0
saveImages(image0, iteration) # save the first image
while True:
    pixels0 = image0.load() #reload the iterated image
 
    for x in range(n):# perform the mapping
        for y in range(n):
            newX = (2*x + y) % n #find new location
            newY = (x + y) % n
            pixels1[newX, newY] = pixels0[x, y] # copy the pixel over
 
    image0 = image1.copy() #transfer back to image0 for the next iteration
    iteration += 1
    saveImages(image0, iteration) # save this iteration's image
 
    if equal(image0, imageOrig):
        break

Bijschriften

Beschrijf in één regel wat dit bestand voorstelt
The phase portrait of Arnold's cat map.

Items getoond in dit bestand

beeldt af

image/gif

15d48a9deeea7020f0ed1b1994353ca581c394b1

2.042.441 byte

46,7999999999999 seconde

263 pixel

224 pixel

Bestandsgeschiedenis

Klik op een datum/tijd om het bestand te zien zoals het destijds was.

Datum/tijdMiniatuurAfmetingenGebruikerOpmerking
huidige versie15 sep 2010 21:14Miniatuurafbeelding voor de versie van 15 sep 2010 21:14224 × 263 (1,95 MB)Inductiveload{{Information |Description={{en|Animation of en:Arnold's cat map (zoomed 3 times to make the pixels clearer, and labelled with the iteration number), using an image of cherries as the starting image. The image is 74 pixels square, and repeats after

Dit bestand wordt op de volgende pagina gebruikt:

Globaal bestandsgebruik

De volgende andere wiki's gebruiken dit bestand: