<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Splines for Math(s) deficient Coders.</title>
		<link>http://www.allegro.cc/forums/view/585707</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 01 Jun 2006 19:41:36 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve been looking up the algorithms and stuff for calculating and drawing splines, and while I can understand some of the explanations, all the images of way too small and incomplete (math) functions, and formulas/equations.</p><p>Is there someone here who can explain it for a coder?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 01 Jun 2006 09:20:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes. You have a set of points. Your goal is to draw a curve that starts in the first point and ends in the last. You can do that by drawing short straight segments, short enough so that it&#39;s not obvious they are straight. So you take a parameter that goes from 0 to 1 with small increments in a for loop. You feed this parameter into some sort of formula to get the next point. You draw a straight line from the previous point to the one you just calculated and move on. When the parameter is 0, the point you get is p0 (the starting points) and when it is 1, the point is your last point. So by the time your for loop ends, you will have drawn a smooth curve between p0 and p3 (if you have 4 points). There are a few different formulas to draw splines for different purposes (you want the line to go through all points or not, the kind of connectivity you want, how changing one point affects the curve, etc.) Bezier is a really simple kind of spline (B-Spline for 4 points). I don&#39;t know the equations by heart, but google does...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Thu, 01 Jun 2006 10:06:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thats the issue, I&#39;ve read a few different explanations that had the equations in them, but I can&#39;t read any of them. English and code is fine, pictures of equations I can&#39;t do.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 01 Jun 2006 10:11:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In that case I think you should forget about all that stuff...<br />Here&#39;s pseudocode anyway:
</p><div class="source-code snippet"><div class="inner"><pre>Point points<span class="k2">[</span><span class="n">4</span><span class="k2">]</span><span class="k2">;</span>
Point p0 <span class="k3">=</span> points<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">;</span>
<span class="k1">for</span> <span class="k2">(</span><span class="k1">double</span> p<span class="k3">=</span><span class="n">0</span>.<span class="n">0</span><span class="k2">;</span> p<span class="k3">&lt;</span><span class="k3">=</span><span class="n">1</span>.<span class="n">0</span><span class="k2">;</span> p<span class="k3">+</span><span class="k3">=</span><span class="n">0</span>.<span class="n">01</span><span class="k2">)</span> <span class="k2">{</span>
   Point p1 <span class="k3">=</span> some_formula<span class="k2">(</span>points, p<span class="k2">)</span><span class="k2">;</span>
   draw_line<span class="k2">(</span>p0, p1<span class="k2">)</span><span class="k2">;</span>
   p0 <span class="k3">=</span> p1<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Thu, 01 Jun 2006 10:17:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, That I can understand, its the some_formula() that I need to understand.</p><p>I&#39;ve already written a nice &quot;arc&quot; drawing routine:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="k1">void</span> draw_arc<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp, point p1, point p2, <span class="k1">double</span> step<span class="k2">)</span></td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  point mp<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td>  step <span class="k3">=</span> M_PI <span class="k3">/</span> step<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>  mp.x <span class="k3">=</span> <span class="k2">(</span> p1.x <span class="k3">+</span> p2.x <span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  mp.y <span class="k3">=</span> <span class="k2">(</span> p1.y <span class="k3">+</span> p2.y <span class="k2">)</span> <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>&#160;</td></tr><tr><td class="number">10</td><td>  <span class="k1">double</span> w <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_303.html" target="_blank">fabs</a><span class="k2">(</span>p2.x <span class="k3">-</span> p1.x<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">double</span> h <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_303.html" target="_blank">fabs</a><span class="k2">(</span>p2.y <span class="k3">-</span> p1.y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  <span class="k1">double</span> ll <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>w<span class="k3">*</span>w <span class="k3">+</span> h<span class="k3">*</span>h<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  <span class="k1">double</span> r <span class="k3">=</span> ll <span class="k3">/</span> <span class="n">2</span>.<span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>  <span class="k1">double</span> start <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a><span class="k2">(</span> p1.y <span class="k3">-</span> mp.y , p1.x <span class="k3">-</span> mp.x <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>  <span class="k1">double</span> end   <span class="k3">=</span> start<span class="k3">+</span>rad<span class="k2">(</span><span class="n">180</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//atan2( p2.y - mp.y , p2.x - mp.x );</span></td></tr><tr><td class="number">17</td><td>  <span class="c">//start + M_PI;</span></td></tr><tr><td class="number">18</td><td>&#160;</td></tr><tr><td class="number">19</td><td>  <span class="k1">double</span> rw <span class="k3">=</span> ll<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  <span class="k1">double</span> rh <span class="k3">=</span> ll<span class="k2">;</span></td></tr><tr><td class="number">21</td><td>  </td></tr><tr><td class="number">22</td><td>        <span class="c">// for testing only, real algo is below</span></td></tr><tr><td class="number">23</td><td>  <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span>bmp, mp.x, mp.y, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>deg<span class="k2">(</span><span class="k3">-</span>start<span class="k2">)</span> <span class="k3">*</span> <span class="n">256</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">360</span>.<span class="n">0</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>deg<span class="k2">(</span><span class="k3">-</span>end<span class="k2">)</span> <span class="k3">*</span> <span class="n">256</span>.<span class="n">0</span> <span class="k3">/</span> <span class="n">360</span>.<span class="n">0</span><span class="k2">)</span>, r, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">55</span>,<span class="n">55</span>,<span class="n">55</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>&#160;</td></tr><tr><td class="number">25</td><td>  start <span class="k3">-</span><span class="k3">=</span> rad<span class="k2">(</span><span class="n">180</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  <span class="k1">double</span> pheta <span class="k3">=</span> start<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>  end <span class="k3">-</span><span class="k3">=</span> rad<span class="k2">(</span><span class="n">180</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\rstart: %f, end: %f"</span>, deg<span class="k2">(</span>start<span class="k2">)</span>, deg<span class="k2">(</span>end<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>  <span class="k1">double</span> lx <span class="k3">=</span> rw<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span> pheta <span class="k2">)</span> <span class="k3">+</span> mp.x<span class="k2">;</span></td></tr><tr><td class="number">32</td><td>  <span class="k1">double</span> ly <span class="k3">=</span> rh<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span> pheta <span class="k2">)</span> <span class="k3">+</span> mp.y<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  <span class="k1">double</span> fx <span class="k3">=</span> lx<span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  <span class="k1">double</span> fy <span class="k3">=</span> ly<span class="k2">;</span></td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td>  <span class="k1">for</span><span class="k2">(</span><span class="k2">;</span> pheta <span class="k3">-</span> <span class="k2">(</span> end <span class="k2">)</span> <span class="k3">&lt;</span> <span class="n">0</span>.<span class="n">001</span><span class="k2">;</span> pheta <span class="k3">+</span><span class="k3">=</span> step<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>    <span class="k1">double</span> x <span class="k3">=</span> rw<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span> pheta <span class="k2">)</span> <span class="k3">+</span> mp.x<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>    <span class="k1">double</span> y <span class="k3">=</span> rh<span class="k3">/</span><span class="n">2</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span> pheta <span class="k2">)</span> <span class="k3">+</span> mp.y<span class="k2">;</span></td></tr><tr><td class="number">39</td><td>&#160;</td></tr><tr><td class="number">40</td><td><span class="c">//    if(lx &amp;&amp; ly) {</span></td></tr><tr><td class="number">41</td><td>      <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>bmp, lx, ly, x, y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">42</td><td>      <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>bmp, lx, ly, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>      <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>bmp, x, y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">44</td><td><span class="c">//    }</span></td></tr><tr><td class="number">45</td><td>&#160;</td></tr><tr><td class="number">46</td><td>    lx <span class="k3">=</span> x<span class="k2">;</span></td></tr><tr><td class="number">47</td><td>    ly <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">48</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">49</td><td>  </td></tr><tr><td class="number">50</td><td>  <span class="k1">if</span><span class="k2">(</span>lx <span class="k3">!</span><span class="k3">=</span> p1.x <span class="k3">&amp;</span><span class="k3">&amp;</span> ly <span class="k3">!</span><span class="k3">=</span> p1.y<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">51</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>bmp, lx, ly, p1.x, p1.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">100</span>, <span class="n">255</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">52</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">53</td><td>&#160;</td></tr><tr><td class="number">54</td><td>  <span class="k1">if</span><span class="k2">(</span>fx <span class="k3">!</span><span class="k3">=</span> p2.x <span class="k3">&amp;</span><span class="k3">&amp;</span> fy <span class="k3">!</span><span class="k3">=</span> p2.y<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">55</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>bmp, fx, fy, p2.x, p2.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">100</span>, <span class="n">255</span>, <span class="n">100</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">56</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">57</td><td>&#160;</td></tr><tr><td class="number">58</td><td>&#160;</td></tr><tr><td class="number">59</td><td><span class="c">//  rect(bmp, p1.x, p1.y, p2.x, p2.y, makecol(100,100,100));</span></td></tr><tr><td class="number">60</td><td>  <a href="http://www.allegro.cc/manual/rect" target="_blank"><span class="a">rect</span></a><span class="k2">(</span>bmp, mp.x-r, mp.y-r, mp.x<span class="k3">+</span>r, mp.y<span class="k3">+</span>r, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">150</span>,<span class="n">150</span>,<span class="n">150</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">61</td><td>  <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>bmp, p1.x, p1.y, p2.x, p2.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">62</td><td>  <a href="http://www.allegro.cc/manual/putpixel" target="_blank"><span class="a">putpixel</span></a><span class="k2">(</span>bmp, mp.x, mp.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">255</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">63</td><td>&#160;</td></tr><tr><td class="number">64</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 01 Jun 2006 10:31:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm, I wouldn&#39;t bother with that function... It would work, I wager, but involves extra maths to compute the remaining splines.</p><p><a href="http://en.wikipedia.org/wiki/Cubic_Hermite_spline">This</a> is a very nice spline. I recommend you use it. To start, just go through and interpolate between two points, then you can move into more.</p><p>That formula takes input as points (split into an x formula and a y formula). Take two arbitrary points, and for m1 use (1, 0) and for m2 use (-1, 0).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 01 Jun 2006 16:06:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I was looking at a bunch of links, and one that really looked neat was the NURB spline. course it had all kinds of corner cases that it had to take care of using extra nodes and such.</p><p>[quote]Hmm, I wouldn&#39;t bother with that function...[/quote]If you mean my arc function, its for arcs <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> and it only does 180° arcs, due to the start + 180 <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> but that was intentional. It wwasn&#39;tintended for use as a spline helper, just something to say that I&#39;m not a complete idiot, just I can&#39;t read most of the &quot;theoretical&quot; equations, [b]especially[/b] when the images used are about 2x too small to show any of the smaller var names legibly.</p><p>But thank you, I should be able to do something with that one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 01 Jun 2006 16:33:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>NURBs are the most generalized kind of splines. All other kinds of splines are basically NURBs with some parts fixed or simplified or ommited or something...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Thu, 01 Jun 2006 17:06:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Good. This is a bump so you can psot back here once you get that sorted, and we can go into using more than 4 control points.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 01 Jun 2006 17:09:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#039;s a small test program I wrote when I was studying B-splines. The code is not well organized but the important part is nice and easy to read. The functions you&#039;re interested in are make_spline() and N() plus some global variables.
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;allegro.h&gt;</span>
<span class="number">   2</span>
<span class="number">   3</span><span class="k1">typedef</span> <span class="k1">struct</span> Vertex <span class="k2">{</span>
<span class="number">   4</span>  <span class="k1">int</span> x<span class="k2">;</span>
<span class="number">   5</span>  <span class="k1">int</span> y<span class="k2">;</span>
<span class="number">   6</span><span class="k2">}</span> Vertex<span class="k2">;</span>
<span class="number">   7</span>
<span class="number">   8</span><span class="k1">const</span> <span class="k1">int</span> n <span class="k3">=</span> <span class="n">12</span><span class="k2">;</span>  <span class="c">// number of control points (4 for a Bezier)</span>
<span class="number">   9</span><span class="k1">int</span> k <span class="k3">=</span> <span class="n">2</span><span class="k2">;</span>      <span class="c">// degree of the spline polynomial</span>
<span class="number">  10</span><span class="k1">int</span> g <span class="k3">=</span> <span class="n">16</span><span class="k2">;</span>       <span class="c">// density of the interpolation</span>
<span class="number">  11</span>Vertex R<span class="k2">[</span>n<span class="k2">]</span><span class="k2">;</span>    <span class="c">// the control grid</span>
<span class="number">  12</span>Vertex <span class="k3">*</span>pbspline<span class="k2">;</span>    <span class="c">// a periodic B-spline curve</span>
<span class="number">  13</span>Vertex <span class="k3">*</span>bspline<span class="k2">;</span>    <span class="c">// a B-spline curve</span>
<span class="number">  14</span><span class="k1">int</span> n_points_periodic<span class="k2">;</span>  <span class="c">// number of vertices in pbspline</span>
<span class="number">  15</span><span class="k1">int</span> n_points<span class="k2">;</span>      <span class="c">// number of vertices in bspline</span>
<span class="number">  16</span><span class="k1">int</span> <span class="k3">*</span>U<span class="k2">;</span>          <span class="c">// the knot vector</span>
<span class="number">  17</span><span class="k1">int</span> u<span class="k2">;</span>          <span class="c">// the number of knots</span>
<span class="number">  18</span>
<span class="number">  19</span><span class="k1">int</span> selectedPoint <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  20</span><span class="k1">bool</span> mouseDown <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  21</span><span class="k1">int</span> grip_x, grip_y<span class="k2">;</span>
<span class="number">  22</span>
<span class="number">  23</span><span class="k1">bool</span> handle_mouse<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  24</span>  <span class="k1">int</span> mx <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_x" target="_blank"><span class="a">mouse_x</span></a><span class="k2">;</span>
<span class="number">  25</span>  <span class="k1">int</span> my <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_y" target="_blank"><span class="a">mouse_y</span></a><span class="k2">;</span>
<span class="number">  26</span>  <span class="k1">int</span> mb <span class="k3">=</span> <a href="http://www.allegro.cc/manual/mouse_b" target="_blank"><span class="a">mouse_b</span></a><span class="k2">;</span>
<span class="number">  27</span>
<span class="number">  28</span>  <span class="k1">bool</span> ret <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  29</span>  <span class="k1">int</span> oldSel <span class="k3">=</span> selectedPoint<span class="k2">;</span>
<span class="number">  30</span>
<span class="number">  31</span>  <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>mb<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  32</span>    mouseDown <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  33</span>    selectedPoint <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
<span class="number">  34</span>    <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  35</span>      <span class="k1">int</span> dx <span class="k3">=</span> mx <span class="k3">-</span> R<span class="k3">&lt;</span>i&gt;.x<span class="k2">;</span>
<span class="number">  36</span>      <span class="k1">int</span> dy <span class="k3">=</span> my <span class="k3">-</span> R<span class="k3">&lt;</span>i&gt;.y<span class="k2">;</span>
<span class="number">  37</span>      <span class="k1">int</span> d2 <span class="k3">=</span> dx<span class="k3">*</span>dx <span class="k3">+</span> dy<span class="k3">*</span>dy<span class="k2">;</span>
<span class="number">  38</span>      <span class="k1">if</span> <span class="k2">(</span>d2 <span class="k3">&lt;</span> <span class="n">4</span><span class="k3">*</span><span class="n">4</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  39</span>        selectedPoint <span class="k3">=</span> i<span class="k2">;</span>
<span class="number">  40</span>        <span class="k1">break</span><span class="k2">;</span>
<span class="number">  41</span>      <span class="k2">}</span>
<span class="number">  42</span>    <span class="k2">}</span>
<span class="number">  43</span>  <span class="k2">}</span>
<span class="number">  44</span>  <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  45</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>mouseDown<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  46</span>      mouseDown <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  47</span>      grip_x <span class="k3">=</span> mx<span class="k2">;</span>
<span class="number">  48</span>      grip_y <span class="k3">=</span> my<span class="k2">;</span>
<span class="number">  49</span>    <span class="k2">}</span>
<span class="number">  50</span>
<span class="number">  51</span>    <span class="k1">if</span> <span class="k2">(</span>selectedPoint <span class="k3">!</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  52</span>      <span class="k1">int</span> dx <span class="k3">=</span> mx <span class="k3">-</span> grip_x<span class="k2">;</span>
<span class="number">  53</span>      <span class="k1">int</span> dy <span class="k3">=</span> my <span class="k3">-</span> grip_y<span class="k2">;</span>
<span class="number">  54</span>      <span class="k1">if</span> <span class="k2">(</span>dx <span class="k3">|</span><span class="k3">|</span> dy<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  55</span>        R<span class="k2">[</span>selectedPoint<span class="k2">]</span>.x <span class="k3">+</span><span class="k3">=</span> dx<span class="k2">;</span>
<span class="number">  56</span>        R<span class="k2">[</span>selectedPoint<span class="k2">]</span>.y <span class="k3">+</span><span class="k3">=</span> dy<span class="k2">;</span>
<span class="number">  57</span>        grip_x <span class="k3">+</span><span class="k3">=</span> dx<span class="k2">;</span>
<span class="number">  58</span>        grip_y <span class="k3">+</span><span class="k3">=</span> dy<span class="k2">;</span>
<span class="number">  59</span>        ret <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number">  60</span>      <span class="k2">}</span>
<span class="number">  61</span>    <span class="k2">}</span>
<span class="number">  62</span>  <span class="k2">}</span>
<span class="number">  63</span>
<span class="number">  64</span>  ret <span class="k3">|</span><span class="k3">=</span> selectedPoint <span class="k3">!</span><span class="k3">=</span> oldSel<span class="k2">;</span>
<span class="number">  65</span>  <span class="k1">return</span> ret<span class="k2">;</span>
<span class="number">  66</span><span class="k2">}</span>
<span class="number">  67</span>
<span class="number">  68</span><span class="c">// make a predefined control line</span>
<span class="number">  69</span><span class="k1">void</span> initialize<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  70</span>  R<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>    R<span class="k2">[</span><span class="n">0</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>
<span class="number">  71</span>  R<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">100</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">450</span><span class="k2">;</span>
<span class="number">  72</span>  R<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">550</span><span class="k2">;</span>
<span class="number">  73</span>  R<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">3</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">350</span><span class="k2">;</span>
<span class="number">  74</span>  R<span class="k2">[</span><span class="n">4</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">4</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">150</span><span class="k2">;</span>
<span class="number">  75</span>  R<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">5</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">350</span><span class="k2">;</span>
<span class="number">  76</span>  R<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">450</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">6</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">500</span><span class="k2">;</span>
<span class="number">  77</span>  R<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">400</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">7</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">250</span><span class="k2">;</span>
<span class="number">  78</span>  R<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">550</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">8</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">50</span><span class="k2">;</span>
<span class="number">  79</span>  R<span class="k2">[</span><span class="n">9</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">700</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">9</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">550</span><span class="k2">;</span>
<span class="number">  80</span>  R<span class="k2">[</span><span class="n">10</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">750</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">10</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">300</span><span class="k2">;</span>
<span class="number">  81</span>  R<span class="k2">[</span><span class="n">11</span><span class="k2">]</span>.x <span class="k3">=</span> <span class="n">700</span><span class="k2">;</span>   R<span class="k2">[</span><span class="n">11</span><span class="k2">]</span>.y <span class="k3">=</span> <span class="n">150</span><span class="k2">;</span>
<span class="number">  82</span>
<span class="number">  83</span>  bspline <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  84</span>  pbspline <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  85</span>  U <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number">  86</span><span class="k2">}</span>
<span class="number">  87</span>
<span class="number">  88</span>
<span class="number">  89</span><span class="k1">void</span> make_periodic_spline<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  90</span>  <span class="k1">int</span> n_sections <span class="k3">=</span> n <span class="k3">-</span> <span class="n">2</span><span class="k2">;</span>
<span class="number">  91</span>  <span class="k1">int</span> i, j, k<span class="k2">;</span>
<span class="number">  92</span>  <span class="k1">float</span> u<span class="k2">;</span>
<span class="number">  93</span>  <span class="k1">float</span> delta<span class="k2">;</span>
<span class="number">  94</span>
<span class="number">  95</span>  n_points_periodic <span class="k3">=</span> n_sections<span class="k3">*</span>g <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number">  96</span>  <span class="k1">if</span> <span class="k2">(</span>pbspline<span class="k2">)</span> <span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span> pbspline<span class="k2">;</span>
<span class="number">  97</span>  pbspline <span class="k3">=</span> <span class="k1">new</span> Vertex<span class="k2">[</span>n_points_periodic<span class="k2">]</span><span class="k2">;</span>
<span class="number">  98</span>
<span class="number">  99</span>  delta <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k3">/</span>g<span class="k2">;</span>
<span class="number"> 100</span>  k <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 101</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n_sections<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 102</span>    u <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 103</span>    <span class="k1">for</span> <span class="k2">(</span>j<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> j<span class="k3">&lt;</span>g<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 104</span>      pbspline<span class="k2">[</span>k<span class="k2">]</span>.x <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="n">0</span>.<span class="n">5f</span> <span class="k3">*</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span>R<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> <span class="k2">(</span><span class="k3">-</span><span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u<span class="k3">*</span>u <span class="k3">+</span> <span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u <span class="k3">+</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">+</span> u<span class="k3">*</span>u<span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.x<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>      pbspline<span class="k2">[</span>k<span class="k2">]</span>.y <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="n">0</span>.<span class="n">5f</span> <span class="k3">*</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span>R<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> <span class="k2">(</span><span class="k3">-</span><span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u<span class="k3">*</span>u <span class="k3">+</span> <span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u <span class="k3">+</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">+</span> u<span class="k3">*</span>u<span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 106</span>      u <span class="k3">+</span><span class="k3">=</span> delta<span class="k2">;</span>
<span class="number"> 107</span>      k<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 108</span>    <span class="k2">}</span>
<span class="number"> 109</span>  <span class="k2">}</span>
<span class="number"> 110</span>  i--<span class="k2">;</span>
<span class="number"> 111</span>  pbspline<span class="k2">[</span>k<span class="k2">]</span>.x <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="n">0</span>.<span class="n">5f</span> <span class="k3">*</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span>R<span class="k3">&lt;</span>i&gt;.x <span class="k3">+</span> <span class="k2">(</span><span class="k3">-</span><span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u<span class="k3">*</span>u <span class="k3">+</span> <span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u <span class="k3">+</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.x <span class="k3">+</span> u<span class="k3">*</span>u<span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.x<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>  pbspline<span class="k2">[</span>k<span class="k2">]</span>.y <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span><span class="k2">(</span><span class="n">0</span>.<span class="n">5f</span> <span class="k3">*</span> <span class="k2">(</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span><span class="k2">(</span><span class="n">1</span>.<span class="n">0f</span><span class="k3">-</span>u<span class="k2">)</span><span class="k3">*</span>R<span class="k3">&lt;</span>i&gt;.y <span class="k3">+</span> <span class="k2">(</span><span class="k3">-</span><span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u<span class="k3">*</span>u <span class="k3">+</span> <span class="n">2</span>.<span class="n">0f</span><span class="k3">*</span>u <span class="k3">+</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.y <span class="k3">+</span> u<span class="k3">*</span>u<span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span><span class="n">2</span><span class="k2">]</span>.y<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span><span class="k2">}</span>
<span class="number"> 114</span>
<span class="number"> 115</span>
<span class="number"> 116</span><span class="k1">float</span> N<span class="k2">(</span><span class="k1">int</span> i, <span class="k1">int</span> k, <span class="k1">float</span> u<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 117</span>  <span class="k1">if</span> <span class="k2">(</span>k<span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 118</span>    <span class="k1">if</span> <span class="k2">(</span>u <span class="k3">&gt;</span><span class="k3">=</span> U<span class="k3">&lt;</span>i&gt; <span class="k3">&amp;</span><span class="k3">&amp;</span> u <span class="k3">&lt;</span> U<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span> <span class="k1">return</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 119</span>    <span class="k1">else</span> <span class="k1">return</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 120</span>  <span class="k2">}</span>
<span class="number"> 121</span>
<span class="number"> 122</span>  <span class="k1">float</span> f1<span class="k2">;</span>
<span class="number"> 123</span>  <span class="k1">float</span> f2<span class="k2">;</span>
<span class="number"> 124</span>
<span class="number"> 125</span>  <span class="k1">if</span> <span class="k2">(</span>U<span class="k2">[</span>i<span class="k3">+</span>k<span class="k2">]</span> <span class="k3">-</span> U<span class="k3">&lt;</span>i&gt; <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 126</span>    f1 <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 127</span>  <span class="k1">else</span>
<span class="number"> 128</span>    f1 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>u <span class="k3">-</span> U<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k3">*</span>N<span class="k2">(</span>i,k-1,u<span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>U<span class="k2">[</span>i<span class="k3">+</span>k<span class="k2">]</span> <span class="k3">-</span> U<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>
<span class="number"> 130</span>  <span class="k1">if</span> <span class="k2">(</span>U<span class="k2">[</span>i<span class="k3">+</span>k<span class="k3">+</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> U<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span> <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 131</span>    f2 <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span>
<span class="number"> 132</span>  <span class="k1">else</span>
<span class="number"> 133</span>    f2 <span class="k3">=</span> <span class="k2">(</span><span class="k2">(</span>U<span class="k2">[</span>i<span class="k3">+</span>k<span class="k3">+</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> u<span class="k2">)</span><span class="k3">*</span>N<span class="k2">(</span>i<span class="k3">+</span><span class="n">1</span>,k-1,u<span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="k2">(</span>U<span class="k2">[</span>i<span class="k3">+</span>k<span class="k3">+</span><span class="n">1</span><span class="k2">]</span> <span class="k3">-</span> U<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 134</span>
<span class="number"> 135</span>  <span class="k1">return</span> f1 <span class="k3">+</span> f2<span class="k2">;</span>
<span class="number"> 136</span><span class="k2">}</span>
<span class="number"> 137</span>
<span class="number"> 138</span>
<span class="number"> 139</span><span class="k1">void</span> make_spline<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 140</span>  <span class="k1">int</span> i, j, l<span class="k2">;</span>
<span class="number"> 141</span>  <span class="k1">int</span> n_sections <span class="k3">=</span> n <span class="k3">-</span> k<span class="k2">;</span>
<span class="number"> 142</span>  <span class="k1">float</span> delta<span class="k2">;</span>
<span class="number"> 143</span>  <span class="k1">float</span> uf<span class="k2">;</span>
<span class="number"> 144</span>  <span class="k1">float</span> tx, ty<span class="k2">;</span>
<span class="number"> 145</span>
<span class="number"> 146</span>  <span class="k1">if</span> <span class="k2">(</span>U<span class="k2">)</span> <span class="k1">delete</span> U<span class="k2">;</span>
<span class="number"> 147</span>  u <span class="k3">=</span> k <span class="k3">+</span> n <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 148</span>  U <span class="k3">=</span> <span class="k1">new</span> <span class="k1">int</span><span class="k3">&lt;</span>u&gt;<span class="k2">;</span>
<span class="number"> 149</span>
<span class="number"> 150</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>k<span class="k3">+</span><span class="n">1</span><span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> U<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 151</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span>k<span class="k3">+</span><span class="n">1</span><span class="k2">;</span> i<span class="k3">&lt;</span>n<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> U<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> i <span class="k3">-</span> k<span class="k2">;</span>
<span class="number"> 152</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span>n<span class="k2">;</span> i<span class="k3">&lt;</span>u<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>   U<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> n <span class="k3">-</span> k<span class="k2">;</span>
<span class="number"> 153</span>
<span class="number"> 154</span>  n_points <span class="k3">=</span> n_sections<span class="k3">*</span>g <span class="k3">+</span> <span class="n">1</span><span class="k2">;</span>
<span class="number"> 155</span>  <span class="k1">if</span> <span class="k2">(</span>bspline<span class="k2">)</span> <span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span> bspline<span class="k2">;</span>
<span class="number"> 156</span>  bspline <span class="k3">=</span> <span class="k1">new</span> Vertex<span class="k2">[</span>n_points<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 157</span>
<span class="number"> 158</span>  delta <span class="k3">=</span> <span class="n">1</span>.<span class="n">0f</span><span class="k3">/</span>g<span class="k2">;</span>
<span class="number"> 159</span>  uf <span class="k3">=</span> <span class="n">0</span>.<span class="n">0</span><span class="k2">;</span>
<span class="number"> 160</span>  <span class="k1">int</span> count<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 161</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n_sections<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 162</span>    <span class="k1">for</span> <span class="k2">(</span>j<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> j<span class="k3">&lt;</span>g<span class="k2">;</span> j<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 163</span>      tx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 164</span>      ty <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 165</span>      <span class="k1">for</span> <span class="k2">(</span>l<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> l<span class="k3">&lt;</span>k<span class="k3">+</span><span class="n">1</span><span class="k2">;</span> l<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 166</span>        tx <span class="k3">+</span><span class="k3">=</span> N<span class="k2">(</span>i<span class="k3">+</span>l,k,uf<span class="k2">)</span><span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span>l<span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 167</span>        ty <span class="k3">+</span><span class="k3">=</span> N<span class="k2">(</span>i<span class="k3">+</span>l,k,uf<span class="k2">)</span><span class="k3">*</span>R<span class="k2">[</span>i<span class="k3">+</span>l<span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 168</span>      <span class="k2">}</span>
<span class="number"> 169</span>      bspline<span class="k2">[</span>count<span class="k2">]</span>.x <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>tx<span class="k2">;</span>
<span class="number"> 170</span>      bspline<span class="k2">[</span>count<span class="k2">]</span>.y <span class="k3">=</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">)</span>ty<span class="k2">;</span>
<span class="number"> 171</span>      uf <span class="k3">+</span><span class="k3">=</span> delta<span class="k2">;</span>
<span class="number"> 172</span>      count<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 173</span>    <span class="k2">}</span>
<span class="number"> 174</span>  <span class="k2">}</span>
<span class="number"> 175</span>  bspline<span class="k2">[</span>count<span class="k2">]</span>.x <span class="k3">=</span> R<span class="k2">[</span>n-1<span class="k2">]</span>.x<span class="k2">;</span>
<span class="number"> 176</span>  bspline<span class="k2">[</span>count<span class="k2">]</span>.y <span class="k3">=</span> R<span class="k2">[</span>n-1<span class="k2">]</span>.y<span class="k2">;</span>
<span class="number"> 177</span><span class="k2">}</span>
<span class="number"> 178</span>
<span class="number"> 179</span>
<span class="number"> 180</span><span class="k1">void</span> draw_grid<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 181</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 182</span>
<span class="number"> 183</span>  <a href="http://www.allegro.cc/manual/clear_to_color" target="_blank"><span class="a">clear_to_color</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 184</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span> i<span class="k3">+</span><span class="k3">=</span><span class="n">50</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/vline" target="_blank"><span class="a">vline</span></a><span class="k2">(</span>bmp, i, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">60</span>, <span class="n">60</span>, <span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 185</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">;</span> i<span class="k3">+</span><span class="k3">=</span><span class="n">50</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/hline" target="_blank"><span class="a">hline</span></a><span class="k2">(</span>bmp, <span class="n">0</span>, i, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">60</span>, <span class="n">60</span>, <span class="n">60</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 186</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k2">;</span> i<span class="k3">+</span><span class="k3">=</span><span class="n">200</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/vline" target="_blank"><span class="a">vline</span></a><span class="k2">(</span>bmp, i, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">80</span>, <span class="n">80</span>, <span class="n">80</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 187</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">;</span> i<span class="k3">+</span><span class="k3">=</span><span class="n">200</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/hline" target="_blank"><span class="a">hline</span></a><span class="k2">(</span>bmp, <span class="n">0</span>, i, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">80</span>, <span class="n">80</span>, <span class="n">80</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 188</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"n = %d"</span>, n<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 189</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, <span class="n">20</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"k = %d"</span>, k<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 190</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, <span class="n">30</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"u = %d"</span>, u<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 191</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, <span class="n">40</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"g = %d"</span>, g<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 192</span>
<span class="number"> 193</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, SCREEN_W-160, <span class="n">10</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">" left - decrease g"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 194</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, SCREEN_W-160, <span class="n">20</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"right - increase g"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 195</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, SCREEN_W-160, <span class="n">30</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">" down - decrease k"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 196</span>  <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, SCREEN_W-160, <span class="n">40</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"   up - increase k"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 197</span><span class="k2">}</span>
<span class="number"> 198</span>
<span class="number"> 199</span>
<span class="number"> 200</span><span class="k1">void</span> draw_control_grid<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 201</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 202</span>  
<span class="number"> 203</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 204</span>    <span class="k1">if</span> <span class="k2">(</span>i <span class="k3">=</span><span class="k3">=</span> selectedPoint<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 205</span>      <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span>bmp, R<span class="k3">&lt;</span>i&gt;.x, R<span class="k3">&lt;</span>i&gt;.y, <span class="n">3</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">240</span>, <span class="n">128</span>, <span class="n">128</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 206</span>      <a href="http://www.allegro.cc/manual/circle" target="_blank"><span class="a">circle</span></a><span class="k2">(</span>bmp, R<span class="k3">&lt;</span>i&gt;.x, R<span class="k3">&lt;</span>i&gt;.y, <span class="n">3</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">64</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 207</span>    <span class="k2">}</span>
<span class="number"> 208</span>    <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 209</span>      <a href="http://www.allegro.cc/manual/circle" target="_blank"><span class="a">circle</span></a><span class="k2">(</span>bmp, R<span class="k3">&lt;</span>i&gt;.x, R<span class="k3">&lt;</span>i&gt;.y, <span class="n">2</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">64</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 210</span>    <span class="k2">}</span>
<span class="number"> 211</span>  <span class="k2">}</span>
<span class="number"> 212</span>  
<span class="number"> 213</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n-1<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 214</span>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>bmp, R<span class="k3">&lt;</span>i&gt;.x, R<span class="k3">&lt;</span>i&gt;.y, R<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.x, R<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">160</span>, <span class="n">120</span>, <span class="n">120</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 215</span>  <span class="k2">}</span>
<span class="number"> 216</span><span class="k2">}</span>
<span class="number"> 217</span>
<span class="number"> 218</span>
<span class="number"> 219</span><span class="k1">void</span> draw_periodic_spline<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 220</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 221</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n_points_periodic<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>   <a href="http://www.allegro.cc/manual/circle" target="_blank"><span class="a">circle</span></a><span class="k2">(</span>bmp, pbspline<span class="k3">&lt;</span>i&gt;.x, pbspline<span class="k3">&lt;</span>i&gt;.y, <span class="n">1</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">200</span>, <span class="n">200</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 222</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n_points_periodic-1<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>bmp, pbspline<span class="k3">&lt;</span>i&gt;.x, pbspline<span class="k3">&lt;</span>i&gt;.y, pbspline<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.x, pbspline<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">180</span>, <span class="n">180</span>, <span class="n">120</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 223</span><span class="k2">}</span>
<span class="number"> 224</span>
<span class="number"> 225</span>
<span class="number"> 226</span><span class="k1">void</span> draw_spline<span class="k2">(</span><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 227</span>  <span class="k1">int</span> i<span class="k2">;</span>
<span class="number"> 228</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n_points<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>   <a href="http://www.allegro.cc/manual/circle" target="_blank"><span class="a">circle</span></a><span class="k2">(</span>bmp, bspline<span class="k3">&lt;</span>i&gt;.x, bspline<span class="k3">&lt;</span>i&gt;.y, <span class="n">1</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">64</span>, <span class="n">200</span>, <span class="n">64</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 229</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>n_points-1<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span>bmp, bspline<span class="k3">&lt;</span>i&gt;.x, bspline<span class="k3">&lt;</span>i&gt;.y, bspline<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.x, bspline<span class="k2">[</span>i<span class="k3">+</span><span class="n">1</span><span class="k2">]</span>.y, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">120</span>, <span class="n">180</span>, <span class="n">120</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 230</span>  <span class="k1">for</span> <span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>u<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <a href="http://www.allegro.cc/manual/textprintf_ex" target="_blank"><span class="a">textprintf_ex</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="n">10</span>, i<span class="k3">*</span><span class="n">10</span> <span class="k3">+</span> <span class="n">60</span>, <a href="http://www.allegro.cc/manual/makecol" target="_blank"><span class="a">makecol</span></a><span class="k2">(</span><span class="n">128</span>,<span class="n">128</span>,<span class="n">128</span><span class="k2">)</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"%d"</span>, U<span class="k3">&lt;</span>i&gt;<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 231</span><span class="k2">}</span>
<span class="number"> 232</span>
<span class="number"> 233</span>
<span class="number"> 234</span><span class="k1">void</span> destroy<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 235</span>  <span class="k1">if</span> <span class="k2">(</span>bspline<span class="k2">)</span> <span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span> bspline<span class="k2">;</span>
<span class="number"> 236</span>  <span class="k1">if</span> <span class="k2">(</span>pbspline<span class="k2">)</span> <span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span> pbspline<span class="k2">;</span>
<span class="number"> 237</span>  <span class="k1">if</span> <span class="k2">(</span>U<span class="k2">)</span> <span class="k1">delete</span> <span class="k2">[</span><span class="k2">]</span> U<span class="k2">;</span>
<span class="number"> 238</span><span class="k2">}</span>
<span class="number"> 239</span>
<span class="number"> 240</span>
<span class="number"> 241</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 242</span>  <a href="http://www.allegro.cc/manual/allegro_init" target="_blank"><span class="a">allegro_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 243</span>  <a href="http://www.allegro.cc/manual/set_color_depth" target="_blank"><span class="a">set_color_depth</span></a><span class="k2">(</span><span class="n">32</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 244</span>  <a href="http://www.allegro.cc/manual/set_gfx_mode" target="_blank"><span class="a">set_gfx_mode</span></a><span class="k2">(</span>GFX_AUTODETECT_WINDOWED, <span class="n">800</span>, <span class="n">600</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 245</span>  <a href="http://www.allegro.cc/manual/install_keyboard" target="_blank"><span class="a">install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 246</span>  <a href="http://www.allegro.cc/manual/install_mouse" target="_blank"><span class="a">install_mouse</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 247</span>  <a href="http://www.allegro.cc/manual/enable_hardware_cursor" target="_blank"><span class="a">enable_hardware_cursor</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 248</span>  <a href="http://www.allegro.cc/manual/show_mouse" target="_blank"><span class="a">show_mouse</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 249</span>  
<span class="number"> 250</span>
<span class="number"> 251</span>  initialize<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 252</span>
<span class="number"> 253</span>  <span class="k1">bool</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 254</span>  <span class="k1">bool</span> done <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 255</span>  <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bmp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/create_bitmap" target="_blank"><span class="a">create_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 256</span>
<span class="number"> 257</span>  <span class="k1">while</span> <span class="k2">(</span><span class="k3">!</span>done<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 258</span>    <span class="k1">while</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/keypressed" target="_blank"><span class="a">keypressed</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 259</span>      <span class="k1">switch</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/readkey" target="_blank"><span class="a">readkey</span></a><span class="k2">(</span><span class="k2">)</span><span class="k3">&gt;</span><span class="k3">&gt;</span><span class="n">8</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 260</span>        <span class="k1">case</span> KEY_LEFT:
<span class="number"> 261</span>          g&gt;&gt;<span class="k3">=</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 262</span>          <span class="k1">if</span> <span class="k2">(</span>g<span class="k3">&lt;</span><span class="n">4</span><span class="k2">)</span> g <span class="k3">=</span> <span class="n">4</span><span class="k2">;</span>
<span class="number"> 263</span>          <span class="k1">else</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 264</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 265</span>        <span class="k1">case</span> KEY_RIGHT:
<span class="number"> 266</span>          g<span class="k3">&lt;</span><span class="k3">&lt;</span><span class="k3">=</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 267</span>          <span class="k1">if</span> <span class="k2">(</span>g&gt;64<span class="k2">)</span> g <span class="k3">=</span> <span class="n">64</span><span class="k2">;</span>
<span class="number"> 268</span>          <span class="k1">else</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 269</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 270</span>        <span class="k1">case</span> KEY_UP:
<span class="number"> 271</span>          k<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
<span class="number"> 272</span>          <span class="k1">if</span> <span class="k2">(</span>k&gt;n-1<span class="k2">)</span> k<span class="k3">=</span>n-1<span class="k2">;</span>
<span class="number"> 273</span>          <span class="k1">else</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 274</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 275</span>        <span class="k1">case</span> KEY_DOWN:
<span class="number"> 276</span>          k--<span class="k2">;</span>
<span class="number"> 277</span>          <span class="k1">if</span> <span class="k2">(</span>k<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> k<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 278</span>          <span class="k1">else</span> redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 279</span>          <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 280</span>        <span class="k1">case</span> KEY_ESC:
<span class="number"> 281</span>          done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 282</span>      <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 283</span>    <span class="k2">}</span>
<span class="number"> 284</span>
<span class="number"> 285</span>    redraw <span class="k3">|</span><span class="k3">=</span> handle_mouse<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 286</span>
<span class="number"> 287</span>    <span class="k1">if</span> <span class="k2">(</span>redraw<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 288</span>      make_periodic_spline<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 289</span>      make_spline<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 290</span>      draw_grid<span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 291</span>      draw_control_grid<span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 292</span>      <span class="c">//draw_periodic_spline(bmp);</span>
<span class="number"> 293</span>      draw_spline<span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 294</span>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>bmp, <a href="http://www.allegro.cc/manual/screen" target="_blank"><span class="a">screen</span></a>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span>, <a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a>, <a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 295</span>    <span class="k2">}</span>
<span class="number"> 296</span>
<span class="number"> 297</span>    redraw <span class="k3">=</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 298</span>  <span class="k2">}</span>
<span class="number"> 299</span>
<span class="number"> 300</span>  destroy<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 301</span>  <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 302</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 303</span><span class="k2">}</span>
<span class="number"> 304</span><a href="http://www.allegro.cc/manual/END_OF_MAIN" target="_blank"><span class="a">END_OF_MAIN</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Thu, 01 Jun 2006 19:41:36 +0000</pubDate>
	</item>
</rss>
