<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dibson.net &#187; animation</title>
	<atom:link href="http://www.dibson.net/tag/animation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dibson.net</link>
	<description>by Dibson T Hoffweiler</description>
	<lastBuildDate>Wed, 25 Aug 2010 22:58:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Sierpinski&#8217;s Carpet Animation</title>
		<link>http://www.dibson.net/2009/11/19/sierpinskis-carpet-animation/</link>
		<comments>http://www.dibson.net/2009/11/19/sierpinskis-carpet-animation/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 08:00:18 +0000</pubDate>
		<dc:creator>Dibson</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[fractal]]></category>
		<category><![CDATA[sierpinski]]></category>

		<guid isPermaLink="false">http://www.dibson.net/?p=377</guid>
		<description><![CDATA[A few weeks ago I wrote a little script (code below the fold) to generate the frames of the following animation. It&#8217;s an animation of different iterations of Sierpinski&#8217;s Carpet. To generate the carpet, take a square. Divide it into nine squares (3&#215;3) and remove the center one. Then, for each of the remaining 8 [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I wrote a little script (code below the fold) to generate the frames of the following animation.  It&#8217;s an animation of different iterations of <a href="http://en.wikipedia.org/wiki/Sierpinski_carpet">Sierpinski&#8217;s Carpet</a>.</p>
<div id="attachment_376" class="wp-caption aligncenter" style="width: 739px"><a href="http://www.dibson.net/wp-content/uploads/2009/11/carpet-729px-0-6.gif"><img src="http://www.dibson.net/wp-content/uploads/2009/11/carpet-729px-0-6.gif" alt="7 Iterations of the Carpet" title="Sierpinski&#039;s Carpet Animation" width="300" height="300" class="size-full wp-image-376" /></a><p class="wp-caption-text">7 Iterations of the Carpet</p></div>
<p>To generate the carpet, take a square.  Divide it into nine squares (3&#215;3) and remove the center one.  Then, for each of the remaining 8 squares, repeat ad infinitum.</p>
<p>If you get bored doing it an infinite number of times, take a break and eat <a href="http://www.evilmadscientist.com/article.php/fractalcookies">Sierpinski&#8217;s Cookie</a>.</p>
<p><span id="more-377"></span></p>
<h4>The Code &#8211; SierpinskisCarpenter.py</h4>
<p>Sorry for the crappy box this is in.  Copy and paste for reading.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#!/usr/bin/python</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># SierpinskisCarpenter.py</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># Author: Dibson T Hoffweiler &lt;dibson@hoffweiler.com&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># WWW: &nbsp; &nbsp;http://www.dibson.net/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Version 2, December 2004</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp;Everyone is permitted to copy and distribute verbatim or modified</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp;copies of this license document, and changing it is allowed as long</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp;as the name is changed.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># </span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1"># &nbsp; 0. You just DO WHAT THE FUCK YOU WANT TO.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> Image</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">class</span> SierpinskisCarpenter:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot; Prepare the Carpenter &quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">color</span> = <span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span>, <span class="nu0">255</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> getCounter<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot; Return current counter value, increment it. &quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; c = <span class="kw2">self</span>.<span class="me1">counter</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">counter</span> += <span class="nu0">1</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> c</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> getFrameFilename<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot; Return filename for next frame. &quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;carpet-frame-%02d-%06d.gif&quot;</span> % <span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">itr_start</span>, <span class="kw2">self</span>.<span class="me1">getCounter</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> getCarpetImage<span class="br0">&#40;</span><span class="kw2">self</span>, itr, size, init=<span class="kw2">True</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot; Return an image object of Sierpinski&#8217;s Carpet</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itr &#8211; int &#8211; how many iterations deep to go</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;size &#8211; int &#8211; width of carpet in pixels</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;init &#8211; bool &#8211; if True, clear counters &#8211; must set False when recursing! (default True)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>init<span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Prepare to lay the carpet out</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">counter</span> = <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">0</span> == itr<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># No need to iterate, return the part</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; part = Image.<span class="kw3">new</span><span class="br0">&#40;</span><span class="st0">&quot;RGB&quot;</span>, <span class="br0">&#40;</span>size, size<span class="br0">&#41;</span>, <span class="kw2">self</span>.<span class="me1">color</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> part</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Get smaller carpet, and paste it in 8 times</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; third = size / <span class="nu0">3</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; partSmall = <span class="kw2">self</span>.<span class="me1">getCarpetImage</span><span class="br0">&#40;</span>itr &#8211; <span class="nu0">1</span>, third, <span class="kw2">False</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im = Image.<span class="kw3">new</span><span class="br0">&#40;</span><span class="st0">&quot;RGB&quot;</span>, <span class="br0">&#40;</span>size, size<span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">255</span>, <span class="nu0">255</span>, <span class="nu0">255</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># top left</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tl_start = <span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, tl_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># top center</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tc_start = <span class="br0">&#40;</span>third, <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, tc_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># top right</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tr_start = <span class="br0">&#40;</span><span class="nu0">2</span> * third, <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, tr_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># middle right</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mr_start = <span class="br0">&#40;</span><span class="nu0">2</span> * third, third<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, mr_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># bottom right</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; br_start = <span class="br0">&#40;</span><span class="nu0">2</span> * third, <span class="nu0">2</span> * third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, br_start<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># bottom center</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bc_start = <span class="br0">&#40;</span>third, <span class="nu0">2</span> * third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, bc_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># bottom left</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bl_start = <span class="br0">&#40;</span><span class="nu0">0</span>, <span class="nu0">2</span> * third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, bl_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># middle left</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ml_start = <span class="br0">&#40;</span><span class="nu0">0</span>, third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; im.<span class="me1">paste</span><span class="br0">&#40;</span>partSmall, ml_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> im</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">def</span> animateCarpet<span class="br0">&#40;</span><span class="kw2">self</span>, itr, size, start=<span class="kw2">None</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&quot;</span><span class="st0">&quot; A recursive function to generate an animation of drawing Sierpinski&#8217;s Carpet.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;- itr &#8211; int &#8211; how many iterations to do</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;- size &#8211; int &#8211; image size will be a square with lengths this many pixels</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;- start &#8211; 2dim tuple &#8211; top left corner of carpet to draw</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;Example:</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sc = SierpinskisCarpenter()</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;itr = 3</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;size = (3 ** itr, 3 ** itr)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;im = sc.animateCarpet(itr, size)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;im.show()</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp;&quot;</span><span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">None</span> == start<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Init the animation</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start = <span class="br0">&#40;</span><span class="nu0">0</span>,<span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">counter</span> = <span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = Image.<span class="kw3">new</span><span class="br0">&#40;</span><span class="st0">&quot;RGB&quot;</span>, <span class="br0">&#40;</span>size, size<span class="br0">&#41;</span>, <span class="br0">&#40;</span><span class="nu0">255</span>, <span class="nu0">255</span>, <span class="nu0">255</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">itr_start</span> = itr</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span>.<span class="me1">save</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">getFrameFilename</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># tab for clean debug output</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; tab = <span class="st0">&quot;<span class="es0">\t</span>&quot;</span> * itr</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#print tab + &quot;MAKE CARPET ITR %s&quot; % (itr)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#print &quot;%sStart %s&quot; % (tab, start)</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="nu0">0</span> == itr<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># LAST ITERATION &#8211; PAINT IT!</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#print &quot;%sPAINTING: Start %s&quot; % (tab, start)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span>.<span class="me1">paste</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">color</span>, <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> + size, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> + size<span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span>.<span class="me1">save</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">getFrameFilename</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># NEED TO ITERATE, DO ALL 8 SQUARES</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; third = size / <span class="nu0">3</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># top left</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tl_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, tl_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># top center</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tc_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> + third, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, tc_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># top right</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tr_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> + <span class="nu0">2</span> * third, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, tr_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># middle right</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mr_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> + <span class="nu0">2</span> * third, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> + third<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, mr_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># bottom right</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; br_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> + <span class="nu0">2</span> * third, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> + <span class="nu0">2</span> * third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, br_start<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># bottom center</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bc_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> + third, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> + <span class="nu0">2</span> * third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, bc_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># bottom left</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bl_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> + <span class="nu0">2</span> * third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, bl_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># middle left</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ml_start = <span class="br0">&#40;</span>start<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, start<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> + third<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">im</span> = <span class="kw2">self</span>.<span class="me1">animateCarpet</span><span class="br0">&#40;</span>itr<span class="nu0">-1</span>, size/<span class="nu0">3</span>, ml_start<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">self</span>.<span class="me1">im</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">cm = SierpinskisCarpenter<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># EXAMPLE: saves 6 iterations of Sierpinski&#8217;s Carpet</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#topItr = 6</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">#size = 3 ** topItr</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">#for itr in range(topItr+1):</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;im = cm.getCarpetImage(itr, size)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># &nbsp; &nbsp;im.save(&quot;carpet-%spx-%s.gif&quot; % (size, itr))</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1"># EXAMPLE: dumps out frames for drawing out carpet</span></div>
</li>
<li class="li2">
<div class="de2"><span class="co1">#cm.animateCarpet(3, 27)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dibson.net/2009/11/19/sierpinskis-carpet-animation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
