File:Arnold's Cat Map animation (74px, zoomed, labelled).gif
Da testwiki.
Vai alla navigazione
Vai alla ricerca
Arnold's_Cat_Map_animation_(74px,_zoomed,_labelled).gif (224 × 263 pixel, dimensione del file: 1,95 MB, tipo MIME: image/gif, ciclico, 117 frame, 47 s)
Questo file proviene da Wikimedia Commons e può essere utilizzato da altri progetti. Di seguito viene mostrata la descrizione presente nella pagina di descrizione del file.
| DescrizioneArnold's Cat Map animation (74px, zoomed, labelled).gif |
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. Used Cherry Stella444.jpg as starting image. |
| Data | |
| Fonte |
Opera propria basata su: Cherry Stella444.jpg: |
| Autore | Inductiveload |
| Altre versioni |
|
Licenza
Inductiveload, detentore del copyright su quest'opera, dichiara di pubblicarla con la seguente licenza:
Questo file è disponibile in base alla licenza Creative Commons Attribuzione-Condividi allo stesso modo 3.0 Unported
Attribuzione:
- Tu sei libero:
- di condividere – di copiare, distribuire e trasmettere quest'opera
- di modificare – di adattare l'opera
- Alle seguenti condizioni:
- attribuzione – Devi fornire i crediti appropriati, un collegamento alla licenza e indicare se sono state apportate modifiche. Puoi farlo in qualsiasi modo ragionevole, ma non in alcun modo che suggerisca che il licenziante approvi te o il tuo uso.
- condividi allo stesso modo – Se remixi, trasformi o sviluppi il materiale, devi distribuire i tuoi contributi in base alla stessa licenza o compatibile all'originale.
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
Didascalie
Aggiungi una brevissima spiegazione di ciò che questo file rappresenta
The phase portrait of Arnold's cat map.
Elementi ritratti in questo file
raffigura
Valore sconosciuto senza un elemento Wikidata
16 set 2010
image/gif
15d48a9deeea7020f0ed1b1994353ca581c394b1
2 042 441 byte
46,7999999999999 secondo
263 pixel
224 pixel
Cronologia del file
Fare clic su un gruppo data/ora per vedere il file come si presentava nel momento indicato.
| Data/Ora | Miniatura | Dimensioni | Utente | Commento | |
|---|---|---|---|---|---|
| attuale | 20:14, 15 set 2010 | 224 × 263 (1,95 MB) | wikimediacommons>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 |
Utilizzo del file
La seguente pagina usa questo file:


