<?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>dev.enekoalonso.com &#187; animation</title>
	<atom:link href="http://dev.enekoalonso.com/tag/animation/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.enekoalonso.com</link>
	<description>having fun with code</description>
	<lastBuildDate>Wed, 12 Oct 2011 21:40:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Chrome Experiments</title>
		<link>http://dev.enekoalonso.com/2009/03/29/290/</link>
		<comments>http://dev.enekoalonso.com/2009/03/29/290/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 23:34:52 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=290</guid>
		<description><![CDATA[chromeexperiments.com gathers a good amount of very impressive javascript demos, showing the future of the Internet, where javascript intensive sites and application will become more and more common. My favorites: Browser ball &#8211; bounce a ball between different browser windows Kaleidoscope &#8211; very smooth animation and beautiful colors Related Posts:October 12, 2011 -- Command line [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.chromeexperiments.com">chromeexperiments.com</a> gathers a good amount of very impressive javascript demos, showing the future of the Internet, where javascript intensive sites and application will become more and more common.</p>
<p>My favorites:<br />
<a href="http://www.chromeexperiments.com/detail/browser-ball/">Browser ball</a> &#8211; bounce a ball between different browser windows<br />
<a href="http://www.chromeexperiments.com/detail/kaleidscope/">Kaleidoscope</a> &#8211; very smooth animation and beautiful colors</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>October 12, 2011 -- <a href="http://dev.enekoalonso.com/2011/10/12/command-line-scripting-with-node-js/" title="Command line scripting with Node.js">Command line scripting with Node.js</a> (0)</li><li>June 14, 2011 -- <a href="http://dev.enekoalonso.com/2011/06/14/titanium-studio-and-titanium-mobile-1-7/" title="Titanium Studio and Titanium Mobile 1.7">Titanium Studio and Titanium Mobile 1.7</a> (0)</li><li>May 18, 2011 -- <a href="http://dev.enekoalonso.com/2011/05/18/location-hash-is-dead-on-html5-browsers/" title="location.hash is dead (on html5 browsers)">location.hash is dead (on html5 browsers)</a> (0)</li><li>May 12, 2011 -- <a href="http://dev.enekoalonso.com/2011/05/12/angry-birds-as-a-web-app/" title="Angry Birds as a Web App">Angry Birds as a Web App</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2009/03/29/290/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spinning Color Wheel: Mootools + Raphael + SVG</title>
		<link>http://dev.enekoalonso.com/2009/01/18/spinning-color-wheel-mootools-raphael-svg/</link>
		<comments>http://dev.enekoalonso.com/2009/01/18/spinning-color-wheel-mootools-raphael-svg/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 18:02:45 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[raphael]]></category>
		<category><![CDATA[rotate]]></category>
		<category><![CDATA[spin]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[wheel]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=255</guid>
		<description><![CDATA[A couple of days ago I was playing at work with the RaphaelJS library to do some image rotation that we may end up using on a new project we are working on. At the end I ended up creating a spinning object with variable speed, similar to this demo I show you here. Using [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago I was playing at work with the <a href="http://raphaeljs.com/">RaphaelJS</a> library to do some image rotation that we may end up using on a new project we are working on. At the end I ended up creating a spinning object with variable speed, similar to this demo I show you here.</p>
<p>Using RaphaelJS it is very easy to embed any image into an <a href="http://www.w3schools.com/svg/">SVG</a> object and rotate it. With a little bit of animation, we can set angular speeds and have some fun :)</p>
<p><a href="http://enekoalonso.com/research/color-wheel.php"><img src="http://dev.enekoalonso.com/wp-content/uploads/2009/01/picture-156-468x300.png" alt="Spinning color wheel" title="Spinning color wheel" width="468" height="300" class="aligncenter size-medium wp-image-256" /></a></p>
<p>I have added an acceleration parameter which will make the speed changes very smooth, although it the new speed is very different than the current one, it will take some time to reach it.</p>
<p>See it in action: <a href="http://enekoalonso.com/research/color-wheel.php">http://enekoalonso.com/research/color-wheel.php</a></p>
<h3>The code</h3>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> ColorWheel = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">Extends</span>: Thread,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">parent</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">raphael</span> = Raphael<span class="br0">&#40;</span><span class="st0">&#39;wheel&#39;</span>, <span class="nu0">400</span>, <span class="nu0">400</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">wheel</span> = <span class="kw1">this</span>.<span class="me1">raphael</span>.<span class="me1">image</span><span class="br0">&#40;</span><span class="st0">&#39;media/svg/colorwheel.svg.png&#39;</span>, <span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">400</span>, <span class="nu0">400</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lblSpeed</span> = $<span class="br0">&#40;</span><span class="st0">&#39;speed&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lblRPM</span> = $<span class="br0">&#40;</span><span class="st0">&#39;rpm&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lblFPS</span> = $<span class="br0">&#40;</span><span class="st0">&#39;fps&#39;</span><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; $<span class="br0">&#40;</span><span class="st0">&#39;btnSetSpeed&#39;</span><span class="br0">&#41;</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setSpeed</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#39;targetSpeed&#39;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; execute: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> now = <span class="kw2">new</span> Date<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getTime</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fps</span> = <span class="br0">&#40;</span><span class="nu0">1000</span> <span class="sy0">/</span> <span class="br0">&#40;</span>now &#8211; <span class="kw1">this</span>.<span class="me1">lastTime</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">toFixed</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lastTime</span> = now;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">targetSpeed</span> == <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// stop</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">angularSpeed</span> <span class="sy0">*</span>= <span class="nu0">0.99</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">angularSpeed</span> <span class="sy0">&lt;</span> <span class="nu0">0.1</span><span class="br0">&#41;</span> <span class="kw1">this</span>.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">angularSpeed</span> <span class="sy0">&lt;</span> <span class="kw1">this</span>.<span class="me1">targetSpeed</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// accelerate</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">angularSpeed</span> = Math.<span class="me1">min</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">angularSpeed</span> + <span class="kw1">this</span>.<span class="me1">acceleration</span>, <span class="kw1">this</span>.<span class="me1">targetSpeed</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">angularSpeed</span> <span class="sy0">&gt;</span> <span class="kw1">this</span>.<span class="me1">targetSpeed</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// brake</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">angularSpeed</span> = Math.<span class="me1">max</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">angularSpeed</span> &#8211; <span class="kw1">this</span>.<span class="me1">acceleration</span>, <span class="kw1">this</span>.<span class="me1">targetSpeed</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> currentRPM = <span class="nu0">60</span><span class="sy0">*</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">angularSpeed</span><span class="re0">/<span class="nu0">360</span><span class="br0">&#41;</span><span class="sy0">*</span><span class="br0">&#40;</span><span class="nu0">1000</span><span class="sy0">/|</span>>this.<span class="me1">options</span>.<span class="me1">interval</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lblSpeed</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&#39;text&#39;</span>, <span class="st0">&#39;Angular speed: &#39;</span> + <span class="kw1">this</span>.<span class="me1">angularSpeed</span>.<span class="me1">toFixed</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> + <span class="st0">&#39; deg per frame&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lblRPM</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&#39;text&#39;</span>, <span class="st0">&#39;Current speed: &#39;</span> + currentRPM.<span class="me1">toFixed</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> + <span class="st0">&#39; rpm&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lblFPS</span>.<span class="me1">set</span><span class="br0">&#40;</span><span class="st0">&#39;text&#39;</span>, <span class="st0">&#39;Frames: &#39;</span> + <span class="kw1">this</span>.<span class="me1">fps</span> + <span class="st0">&#39; fps&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">wheel</span>.<span class="me1">rotate</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">angularSpeed</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; start: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">angularSpeed</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setSpeed</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#39;targetSpeed&#39;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">acceleration</span> = <span class="nu0">0.1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">lastTime</span> = <span class="kw2">new</span> Date<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getTime</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">parent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; setSpeed: <span class="kw2">function</span><span class="br0">&#40;</span>rpm<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">stopped</span><span class="br0">&#41;</span> <span class="kw1">this</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">targetSpeed</span> = <span class="br0">&#40;</span>rpm<span class="re0">/<span class="nu0">60</span><span class="br0">&#41;</span><span class="sy0">*</span><span class="br0">&#40;</span><span class="nu0">360</span><span class="br0">&#41;</span><span class="sy0">*</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">interval</span><span class="sy0">/|</span>><span class="nu0">1000</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;setSpeed (rpm,anglespeed): &#39;</span>, rpm, <span class="kw1">this</span>.<span class="me1">targetSpeed</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">window.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;domready&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">new</span> ColorWheel<span class="br0">&#40;</span><span class="br0">&#123;</span>interval:<span class="nu0">1000</span><span class="sy0">/</span><span class="nu0">30</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// 30 fps</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Enjoy!</p>
<p>PS: I took the <a href="http://commons.wikimedia.org/wiki/File:Colorwheel.svg">color wheel from Wikipedia</a>, although I couldn&#8217;t figure out how to embed an SVG graphic into a Raphael SVG container.</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>December 26, 2008 -- <a href="http://dev.enekoalonso.com/2008/12/26/forest-demo-was-grass/" title="Forest demo (was Grass)">Forest demo (was Grass)</a> (0)</li><li>October 5, 2010 -- <a href="http://dev.enekoalonso.com/2010/10/05/javascript-console-in-the-terminal-command-line/" title="Javascript console in the terminal (command line)">Javascript console in the terminal (command line)</a> (1)</li><li>September 17, 2010 -- <a href="http://dev.enekoalonso.com/2010/09/17/mootools-core-for-server-and-mobile-development/" title="MooTools Core for Server and Mobile Development">MooTools Core for Server and Mobile Development</a> (1)</li><li>April 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/04/28/mooml-1-2-3-bye-bye-with/" title="Mooml 1.2.3 &#8211; Bye, bye, with()">Mooml 1.2.3 &#8211; Bye, bye, with()</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2009/01/18/spinning-color-wheel-mootools-raphael-svg/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Forest demo (was Grass)</title>
		<link>http://dev.enekoalonso.com/2008/12/26/forest-demo-was-grass/</link>
		<comments>http://dev.enekoalonso.com/2008/12/26/forest-demo-was-grass/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 23:45:56 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[effects]]></category>
		<category><![CDATA[light]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[sound]]></category>
		<category><![CDATA[soundmanager2]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=214</guid>
		<description><![CDATA[I have updated the Grass demo and renamed it to Forest, which I think is a more appropriate environment for the sounds I used. I have done some fixes to the rain loop and I have added some light animations. Related Posts:December 23, 2008 -- Grass demo: background sounds (0)April 10, 2009 -- Synchronizing sounds [...]]]></description>
			<content:encoded><![CDATA[<p>I have updated the <a href="http://dev.enekoalonso.com/2008/12/23/grass-demo-background-sounds/">Grass demo</a> and renamed it to Forest, which I think is a more appropriate environment for the sounds I used. I have done some fixes to the rain loop and I have added some light animations.<br />
<a href="http://dev.enekoalonso.com/research/forest.php"><img src="http://dev.enekoalonso.com/wp-content/uploads/2008/12/picture-149-471x300.png" alt="Magic Forest demo" title="Magic Forest demo" width="471" height="300" class="aligncenter size-medium wp-image-215" /></a></p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>December 23, 2008 -- <a href="http://dev.enekoalonso.com/2008/12/23/grass-demo-background-sounds/" title="Grass demo: background sounds">Grass demo: background sounds</a> (0)</li><li>April 10, 2009 -- <a href="http://dev.enekoalonso.com/2009/04/10/synchronizing-sounds-or-trying-to/" title="Synchronizing sounds (or trying to&#8230;)">Synchronizing sounds (or trying to&#8230;)</a> (0)</li><li>December 20, 2008 -- <a href="http://dev.enekoalonso.com/2008/12/20/particle-balls-demo-now-with-sound/" title="Particle Balls demo, now with sound!">Particle Balls demo, now with sound!</a> (3)</li><li>January 18, 2009 -- <a href="http://dev.enekoalonso.com/2009/01/18/spinning-color-wheel-mootools-raphael-svg/" title="Spinning Color Wheel: Mootools + Raphael + SVG">Spinning Color Wheel: Mootools + Raphael + SVG</a> (7)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2008/12/26/forest-demo-was-grass/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Splitting a vector into two vectors 90 degrees apart</title>
		<link>http://dev.enekoalonso.com/2008/12/25/splitting-a-vector-into-two-vectors-90-degrees-apart/</link>
		<comments>http://dev.enekoalonso.com/2008/12/25/splitting-a-vector-into-two-vectors-90-degrees-apart/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 06:58:39 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[moving]]></category>
		<category><![CDATA[pitagoras]]></category>
		<category><![CDATA[split]]></category>
		<category><![CDATA[trigonometry]]></category>
		<category><![CDATA[vector]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=192</guid>
		<description><![CDATA[I wanted to add something special to the Particle-Balls demo I made. At first, the idea seemed pretty simple: When clicking on a moving ball, split it in two with a 90&#176; angle between them (&#960;/2 in radians). To keep it simple, both balls will have the same size as the original and the same [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to add something special to the <a href="http://dev.enekoalonso.com/research/particle-balls.php">Particle-Balls demo</a> I made. At first, the idea seemed pretty simple: When clicking on a moving ball, split it in two with a 90&deg; angle between them (&pi;/2 in radians). To keep it simple, both balls will have the same size as the original and the same speed.</p>
<p><center><img src="research/media/images/graphs/vector-split.png" alt="Vector split" /></center></p>
<h3>Moving objects</h3>
<p>So far, the way I have always animated objects is by storing a 2D position (x, y) and a 2D speed (horizontal speed and vertical speed). If the vertical speed is zero the object will be moving horizontally. If the vertical speed and horizontal are the same, the object will be moving at 45 degrees (&pi;/4) and so on. It is very easy to update the position on every step of the animation according to the speed:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="co1">// Speed is the number of pixels per second.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Interval is the time between calls in milliseconds.</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">this</span>.<span class="me1">position</span>.<span class="me1">x</span> += <span class="kw1">this</span>.<span class="me1">speed</span>.<span class="me1">x</span> <span class="sy0">*</span> <span class="br0">&#40;</span>interval<span class="sy0">/</span><span class="nu0">1000</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">this</span>.<span class="me1">position</span>.<span class="me1">y</span> += <span class="kw1">this</span>.<span class="me1">speed</span>.<span class="me1">y</span> <span class="sy0">*</span> <span class="br0">&#40;</span>interval<span class="sy0">/</span><span class="nu0">1000</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>Calculating the moving vector</h3>
<p>When I started writing the code to split the ball in two, soon I realized my math was way deep in my memory where I couldn&#8217;t find it. Yes, trigonometry had to be involved, since I needed to calculate the angle of a moving ball based on the vertical and horizontal velocity. Then I would add 45 degrees (&pi;/4) to the existing ball and create a clone of it, but subtracting 45 degrees (&pi;/4) from the original angle. Easy, uh?</p>
<p>Let&#8217;s see. First we need to get the angle of the vector the object is moving on. This vector is determined by the vertical and horizontal speed, which form a <a href="http://en.wikipedia.org/wiki/Right_triangle#Types_of_triangles">right triangle</a>:</p>
<p><center><img src="http://l.wordpress.com/latex.php?latex=%5Ctheta%3Darctan%28%5Cfrac%7Bopposite%7D%7Badjacent%7D%29&#038;bg=0D324F&#038;fg=FFFFFF&#038;s=1" title="\theta=arctan(\frac{opposite}{adjacent})" style="vertical-align:-20%;" class="tex" alt="\theta=arctan(\frac{opposite}{adjacent})" /></center></p>
<p>Or in Javascript:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> angle = Math.<span class="me1">atan2</span><span class="br0">&#40;</span>ball.<span class="me1">speed</span>.<span class="me1">y</span>, ball.<span class="me1">speed</span>.<span class="me1">x</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>Angle of new vectors</h3>
<p>Once we have the angle, we can calculate the angle of the new vectors:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> V1angle = angle + Math.<span class="me1">PI</span><span class="sy0">/</span><span class="nu0">4</span>; <span class="co1">// Add 90 degrees</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> V2angle = angle &#8211; Math.<span class="me1">PI</span><span class="sy0">/</span><span class="nu0">4</span>; <span class="co1">// Subtract 90 degrees</span></div>
</li>
</ol>
</div>
<h3>2D speeds of new vectors</h3>
<p>Once we have the final angles we can calculate the new horizontal and vertical speeds of the new vectors. But first we need Pitagoras to calculate the actual speed of the original vector:</p>
<p><center><img src="http://l.wordpress.com/latex.php?latex=speed%3D%5Csqrt%7Badjacent%5E2%2Bopposite%5E2%7D&#038;bg=0D324F&#038;fg=FFFFFF&#038;s=1" title="speed=\sqrt{adjacent^2+opposite^2}" style="vertical-align:-20%;" class="tex" alt="speed=\sqrt{adjacent^2+opposite^2}" /></center></p>
<p>In Javascript:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> speed = Math.<span class="me1">sqrt</span><span class="br0">&#40;</span>Math.<span class="me1">pow</span><span class="br0">&#40;</span>ball.<span class="me1">speed</span>.<span class="me1">x</span>,<span class="nu0">2</span><span class="br0">&#41;</span>+Math.<span class="me1">pow</span><span class="br0">&#40;</span>ball.<span class="me1">speed</span>.<span class="me1">y</span>,<span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Given the hypotenuse (speed) and the angle, we can calculate the sides:<br />
<center><img src="http://l.wordpress.com/latex.php?latex=opposite%3Dspeed%2Asin%28%5Ctheta%29&#038;bg=0D324F&#038;fg=FFFFFF&#038;s=1" title="opposite=speed*sin(\theta)" style="vertical-align:-20%;" class="tex" alt="opposite=speed*sin(\theta)" /></center><br />
<center><img src="http://l.wordpress.com/latex.php?latex=adjacent%3Dspeed%2Acos%28%5Ctheta%29&#038;bg=0D324F&#038;fg=FFFFFF&#038;s=1" title="adjacent=speed*cos(\theta)" style="vertical-align:-20%;" class="tex" alt="adjacent=speed*cos(\theta)" /></center></p>
<p>In Javascript:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">ball1.<span class="me1">speed</span>.<span class="me1">x</span> = speed <span class="sy0">*</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>V1angle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">ball1.<span class="me1">speed</span>.<span class="me1">y</span> = speed <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>V1angle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">ball2.<span class="me1">speed</span>.<span class="me1">x</span> = speed <span class="sy0">*</span> Math.<span class="me1">cos</span><span class="br0">&#40;</span>V2angle<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">ball2.<span class="me1">speed</span>.<span class="me1">y</span> = speed <span class="sy0">*</span> Math.<span class="me1">sin</span><span class="br0">&#40;</span>V2angle<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>And that is it! At the end, the math is not that complicated, as you can see. But if you haven&#8217;t used trigonometry in years, it kind of hurts a little bit when you have to figure it out.</p>
<p>PS: Thanks to my German sister Sarah for your help (we figured it out while having dinner)</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>August 11, 2009 -- <a href="http://dev.enekoalonso.com/2009/08/11/russian-multiplication-in-javascript/" title="Russian multiplication in Javascript">Russian multiplication in Javascript</a> (0)</li><li>March 29, 2009 -- <a href="http://dev.enekoalonso.com/2009/03/29/290/" title="Chrome Experiments">Chrome Experiments</a> (0)</li><li>January 18, 2009 -- <a href="http://dev.enekoalonso.com/2009/01/18/spinning-color-wheel-mootools-raphael-svg/" title="Spinning Color Wheel: Mootools + Raphael + SVG">Spinning Color Wheel: Mootools + Raphael + SVG</a> (7)</li><li>December 26, 2008 -- <a href="http://dev.enekoalonso.com/2008/12/26/forest-demo-was-grass/" title="Forest demo (was Grass)">Forest demo (was Grass)</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2008/12/25/splitting-a-vector-into-two-vectors-90-degrees-apart/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

