{"id":138,"date":"2007-11-01T09:52:30","date_gmt":"2007-11-01T14:52:30","guid":{"rendered":"http:\/\/www.pixelwit.com\/blog\/2007\/11\/01\/curveto-visualization\/"},"modified":"2009-08-14T15:09:38","modified_gmt":"2009-08-14T20:09:38","slug":"curveto-visualization","status":"publish","type":"post","link":"https:\/\/www.pixelwit.com\/blog\/2007\/11\/01\/curveto-visualization\/","title":{"rendered":"Flash CurveTo Visualization Code"},"content":{"rendered":"<p>If you&#8217;ve ever wondered how Adobe Flash draws a curve when issued a &#8220;curveTo&#8221; command this article will help you visualize the process.<\/p>\n<p>As you probably know, Flash requires three points to draw an exponential curve.<\/p>\n<ol>\n<li><strong>A Starting Point<\/strong>.  Wherever the Flash drawing pen is currently located.  If you have not previously moved the pen with &#8220;lineTo&#8221;, &#8220;curveTo&#8221;, or &#8220;moveTo&#8221; the pen defaults to the origin (0, 0).<\/li>\n<li><strong>A Control Point<\/strong>.  A point which the the Flash drawing pen will head toward before changing direction and heading toward the end point.  The pen generally does not go through the control point unless your &#8220;curve&#8221; is nearly straight. <\/li>\n<li><strong>An End Point<\/strong>.  Where the Flash drawing pen will come to rest when the curve is complete.<\/li>\n<\/ol>\n<p>But how exactly does the control point &#8220;control&#8221; the shape of the curve?  How does Flash precisely map the vague concept of heading <em>towards<\/em> a point and then land precisely at another point?  Take a look at the SWF file below<!--more-->.  The red dot represents the Starting Point, the green dot represents the Control Point and the blue dot represents the End Point.  The magenta (purple) dot represents various points along the &#8220;curveTo&#8221; path.  So how does Flash determine where the magenta dot should be?<\/p>\n\n<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t\t\tid=\"fm_curveto_02_913258047\"\n\t\t\tclass=\"flashmovie\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"400\">\n\t<param name=\"movie\" value=\"\/blog\/wp-content\/uploads\/2007\/11\/curveto_02.swf\" \/>\n\t<!--[if !IE]>-->\n\t<object\ttype=\"application\/x-shockwave-flash\"\n\t\t\tdata=\"\/blog\/wp-content\/uploads\/2007\/11\/curveto_02.swf\"\n\t\t\tname=\"fm_curveto_02_913258047\"\n\t\t\twidth=\"500\"\n\t\t\theight=\"400\">\n\t<!--<![endif]-->\n\t\t\n\t<!--[if !IE]>-->\n\t<\/object>\n\t<!--<![endif]-->\n<\/object>\n<ul>\n<li>You can drag the red, green and blue dots.<\/li>\n<li>Pressing the \"<strong>Q<\/strong>\" key freezes the curveTo function one <strong>Q<\/strong>uarter of the way along its path.<\/li>\n<\/ul>\n<p>Here is how to visualize the process... <\/p>\n<ol>\n<li>Determine where you want to be along the curved path.  This can be represented as a ratio, fraction or percentage of the total distance needed to travel along the path from the Start Point to the End Point.  For this example, we'll use 1\/4 (same as .25 or 25%).<\/li>\n<li>Draw a yellow line from the red Starting Point to the green Control Point.<\/li>\n<li>Draw a yellow dot on the yellow line <strong>1\/4 of the distance<\/strong> from the red Start Point to the green Control point.<\/li>\n<li>Draw a cyan line from the green Control Point to the blue End Point.<\/li>\n<li>Draw a cyan dot on the cyan line <strong>1\/4 of the distance<\/strong> from the green Control Point to the blue End Point.<\/li>\n<li>Draw a magenta line from the yellow dot to the cyan dot.<\/li>\n<li>Draw a magenta dot on the magenta line <strong>1\/4 of the distance<\/strong> from the yellow dot to the cyan dot.  The magenta dot now represents a point 1\/4 of the way along the curveTo path.<\/li>\n<li>To find all other points on the path, repeat this process with different ratios (or fractions or percentages).  The example above repeatedly goes from .01 to .99 and then bounces back to .01.<\/li>\n<\/ol>\n<p>So when Flash draws a curve with the \"curveTo\" command it essentially goes through the same process as above for a series of points along the curve's path and then connects those points with straight line segments.  So now you know.<\/p>\n<p>If you'd like to dig through the code used to generate the above SWF file, here it is...<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:100%;height:700px;\"><div class=\"actionscript codecolorer\"><span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Red Dot (Start Point)<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;P1&quot;<\/span>, <span class=\"nu0\">10<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP1.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">20<\/span>, 0xFF0000<span class=\"br0\">&#41;<\/span>;<br \/>\nP1.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>.5, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP1.<span class=\"kw3\">_x<\/span> = <span class=\"nu0\">50<\/span>;<br \/>\nP1.<span class=\"kw3\">_y<\/span> = <span class=\"nu0\">50<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Green Dot (Control Point)<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;P2&quot;<\/span>, <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP2.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">20<\/span>, 0x00FF00<span class=\"br0\">&#41;<\/span>;<br \/>\nP2.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>.5, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP2.<span class=\"kw3\">_x<\/span> = <span class=\"nu0\">450<\/span>;<br \/>\nP2.<span class=\"kw3\">_y<\/span> = <span class=\"nu0\">50<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Blue Dot (End Point)<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;P3&quot;<\/span>, <span class=\"nu0\">30<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP3.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">20<\/span>, 0x0000FF<span class=\"br0\">&#41;<\/span>;<br \/>\nP3.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>.5, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP3.<span class=\"kw3\">_x<\/span> = <span class=\"nu0\">50<\/span>;<br \/>\nP3.<span class=\"kw3\">_y<\/span> = <span class=\"nu0\">350<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Yellow Dot<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;P12&quot;<\/span>, <span class=\"nu0\">40<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP12.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span>, 0xFFFF00<span class=\"br0\">&#41;<\/span>;<br \/>\nP12.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>.5, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Cyan Dot<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;P23&quot;<\/span>, <span class=\"nu0\">50<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP23.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span>, 0x00FFFF<span class=\"br0\">&#41;<\/span>;<br \/>\nP23.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>.5, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Magenta Dot<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;P123&quot;<\/span>, <span class=\"nu0\">60<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nP123.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span>, 0xFF00FF<span class=\"br0\">&#41;<\/span>;<br \/>\nP123.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>.5, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Red Arc<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;PartLineA&quot;<\/span>, <span class=\"nu0\">70<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nPartLineA.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span>, 0xFF0000<span class=\"br0\">&#41;<\/span>;<br \/>\nPartLineA.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P1.<span class=\"kw3\">_x<\/span>, P1.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nPartLineA.<span class=\"kw3\">curveTo<\/span><span class=\"br0\">&#40;<\/span>P2.<span class=\"kw3\">_x<\/span>, P2.<span class=\"kw3\">_y<\/span>, P3.<span class=\"kw3\">_x<\/span>, P3.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Blue Arc<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;PartLineB&quot;<\/span>, <span class=\"nu0\">80<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nPartLineB.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span>, 0x000FF<span class=\"br0\">&#41;<\/span>;<br \/>\nPartLineB.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P1.<span class=\"kw3\">_x<\/span>, P1.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nPartLineB.<span class=\"kw3\">curveTo<\/span><span class=\"br0\">&#40;<\/span>P2.<span class=\"kw3\">_x<\/span>, P2.<span class=\"kw3\">_y<\/span>, P3.<span class=\"kw3\">_x<\/span>, P3.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Magenta Line<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;GuideLine&quot;<\/span>, <span class=\"nu0\">5<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span>, 0xFF00FF<span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P12.<span class=\"kw3\">_x<\/span>, P12.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>P23.<span class=\"kw3\">_x<\/span>, P23.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Yellow Line (Connects Starting Point to Control Point).<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;GuideLine2&quot;<\/span>, <span class=\"nu0\">6<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine2.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span>, 0xFFFF00<span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine2.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P1.<span class=\"kw3\">_x<\/span>, P1.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine2.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>P2.<span class=\"kw3\">_x<\/span>, P2.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Cyan Line (Connects Control Point to End Point).<\/span><br \/>\n<span class=\"kw3\">createEmptyMovieClip<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;GuideLine3&quot;<\/span>, <span class=\"nu0\">7<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine3.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span>, 0x00FFFF<span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine3.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P2.<span class=\"kw3\">_x<\/span>, P2.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\nGuideLine3.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>P3.<span class=\"kw3\">_x<\/span>, P3.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Animate the line by bouncing the values of &quot;ratio&quot; between 0 and 1.<\/span><br \/>\n<span class=\"kw2\">var<\/span> step = .0025;<br \/>\n<span class=\"kw2\">var<\/span> curveRatio = <span class=\"nu0\">0<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"kw2\">function<\/span> showCurveTo<span class=\"br0\">&#40;<\/span>ratio<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; P12.<span class=\"kw3\">_x<\/span> = P1.<span class=\"kw3\">_x<\/span>+<span class=\"br0\">&#40;<\/span>P2._x-P1.<span class=\"kw3\">_x<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; P23.<span class=\"kw3\">_x<\/span> = P2.<span class=\"kw3\">_x<\/span>+<span class=\"br0\">&#40;<\/span>P3._x-P2.<span class=\"kw3\">_x<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; P123.<span class=\"kw3\">_x<\/span> = P12.<span class=\"kw3\">_x<\/span>+<span class=\"br0\">&#40;<\/span>P23._x-P12.<span class=\"kw3\">_x<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; P12.<span class=\"kw3\">_y<\/span> = P1.<span class=\"kw3\">_y<\/span>+<span class=\"br0\">&#40;<\/span>P2._y-P1.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; P23.<span class=\"kw3\">_y<\/span> = P2.<span class=\"kw3\">_y<\/span>+<span class=\"br0\">&#40;<\/span>P3._y-P2.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; P123.<span class=\"kw3\">_y<\/span> = P12.<span class=\"kw3\">_y<\/span>+<span class=\"br0\">&#40;<\/span>P23._y-P12.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">*<\/span>ratio;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; PartLineA.<span class=\"kw3\">clear<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; PartLineA.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span>, 0xFF0000<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; PartLineA.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P1.<span class=\"kw3\">_x<\/span>, P1.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; PartLineA.<span class=\"kw3\">curveTo<\/span><span class=\"br0\">&#40;<\/span>P12.<span class=\"kw3\">_x<\/span>, P12.<span class=\"kw3\">_y<\/span>, P123.<span class=\"kw3\">_x<\/span>, P123.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; PartLineB.<span class=\"kw3\">clear<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; PartLineB.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span>, 0x0000FF<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; PartLineB.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P3.<span class=\"kw3\">_x<\/span>, P3.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; PartLineB.<span class=\"kw3\">curveTo<\/span><span class=\"br0\">&#40;<\/span>P23.<span class=\"kw3\">_x<\/span>, P23.<span class=\"kw3\">_y<\/span>, P123.<span class=\"kw3\">_x<\/span>, P123.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/<\/span><br \/>\n&nbsp; &nbsp; GuideLine.<span class=\"kw3\">clear<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span>, 0xFF00FF<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P12.<span class=\"kw3\">_x<\/span>, P12.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>P23.<span class=\"kw3\">_x<\/span>, P23.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw2\">function<\/span> bounceCurve <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; curveRatio += step;<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span>curveRatio<span class=\"sy0\">&gt;<\/span><span class=\"nu0\">1<\/span> <span class=\"sy0\">||<\/span> curveRatio<span class=\"sy0\">&lt;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> step<span class=\"sy0\">*<\/span>=-<span class=\"nu0\">1<\/span>;<br \/>\n&nbsp; &nbsp; showCurveTo<span class=\"br0\">&#40;<\/span>curveRatio<span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw2\">function<\/span> sameCurve<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; showCurveTo<span class=\"br0\">&#40;<\/span>curveRatio<span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw2\">function<\/span> toggleQuarter<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Key<\/span>.<span class=\"kw3\">getCode<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> &nbsp;== <span class=\"nu0\">81<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><span class=\"co1\">\/\/ &quot;Q&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">onEnterFrame<\/span> == sameCurve<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">onEnterFrame<\/span> = bounceCurve;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"kw1\">else<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curveRatio = .25;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">onEnterFrame<\/span> = sameCurve;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"kw3\">onEnterFrame<\/span> = bounceCurve;<br \/>\n<span class=\"kw3\">onKeyDown<\/span> = toggleQuarter;<br \/>\n<span class=\"kw3\">Key<\/span>.<span class=\"kw3\">addListener<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">this<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/ Allow dots to be dragged and update lines.<\/span><br \/>\n<span class=\"kw2\">var<\/span> pressed = <span class=\"kw2\">null<\/span>;<br \/>\nP1.<span class=\"kw3\">onPress<\/span> = P2.<span class=\"kw3\">onPress<\/span> = P3.<span class=\"kw3\">onPress<\/span> = <span class=\"kw2\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; pressed = <span class=\"kw3\">this<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">onMouseMove<\/span> = movePressed;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\nP1.<span class=\"kw3\">onRelease<\/span> = P2.<span class=\"kw3\">onRelease<\/span> = P3.<span class=\"kw3\">onRelease<\/span> = <br \/>\nP1.<span class=\"kw3\">onReleaseOutside<\/span> = P2.<span class=\"kw3\">onReleaseOutside<\/span> = P3.<span class=\"kw3\">onReleaseOutside<\/span> = <span class=\"kw2\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; pressed = <span class=\"kw2\">null<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">onMouseMove<\/span> = <span class=\"kw2\">null<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\nmovePressed = <span class=\"kw2\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; pressed.<span class=\"kw3\">_x<\/span> = <span class=\"kw3\">_xmouse<\/span>;<br \/>\n&nbsp; &nbsp; pressed.<span class=\"kw3\">_y<\/span> = <span class=\"kw3\">_ymouse<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine2.<span class=\"kw3\">clear<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine2.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span>, 0xFFFF00<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine2.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P1.<span class=\"kw3\">_x<\/span>, P1.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine2.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>P2.<span class=\"kw3\">_x<\/span>, P2.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine3.<span class=\"kw3\">clear<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine3.<span class=\"kw3\">lineStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span>, 0x00FFFF<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine3.<span class=\"kw3\">moveTo<\/span><span class=\"br0\">&#40;<\/span>P2.<span class=\"kw3\">_x<\/span>, P2.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; GuideLine3.<span class=\"kw3\">lineTo<\/span><span class=\"br0\">&#40;<\/span>P3.<span class=\"kw3\">_x<\/span>, P3.<span class=\"kw3\">_y<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">updateAfterEvent<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><br \/>\n<span class=\"co1\">\/\/<\/span><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>A tutorial explaining how the CurveTo command works in Flash with a very helpful curveTo visualization tool to help bring it all together.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[8],"tags":[23,37],"class_list":["post-138","post","type-post","status-publish","format-standard","hentry","category-flash","tag-actionscript","tag-tutorial"],"_links":{"self":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/comments?post=138"}],"version-history":[{"count":0,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/posts\/138\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/media?parent=138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/categories?post=138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pixelwit.com\/blog\/wp-json\/wp\/v2\/tags?post=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}