<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Rounded Rects</title>
		<link>http://www.allegro.cc/forums/view/589968</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 11 Feb 2007 12:58:57 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;ve been struggling with accomplishing this probably simple issue for some time now and can&#39;t figure it out. I don&#39;t understand the math in connecting 4 lines with arcs due to my limited knowledge in math.<br />Given this arc routine below, I&#39;m trying to make a rounded rectangle using it.<br />(note that this isn&#39;t in allegro and I&#39;d prefer it not to be since I&#39;m not using it for this):
</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> doArc<span class="k2">(</span><span class="k1">int</span> centerX, <span class="k1">int</span> centerY, <span class="k1">unsigned</span> <span class="k1">const</span> <span class="k1">int</span> segments, <span class="k1">float</span> radius, <span class="k1">float</span> startAngle, <span class="k1">float</span> sweep<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>    <span class="k1">float</span> angle <span class="k3">=</span> startAngle <span class="k3">*</span> <span class="n">3</span>.<span class="n">14159265</span> <span class="k3">/</span> <span class="n">180</span><span class="k2">;</span> <span class="c">// initial angle in radians</span></td></tr><tr><td class="number">4</td><td>    <span class="k1">float</span> angleInc <span class="k3">=</span> sweep <span class="k3">*</span> <span class="n">3</span>.<span class="n">14159265</span> <span class="k3">/</span><span class="k2">(</span><span class="n">180</span> <span class="k3">*</span> segments<span class="k2">)</span><span class="k2">;</span> <span class="c">// angle increment</span></td></tr><tr><td class="number">5</td><td>    <span class="k1">float</span> cx <span class="k3">=</span> centerX <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span>, cy <span class="k3">=</span> centerY <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <span class="k1">float</span> oldcx <span class="k3">=</span> cx, oldcy <span class="k3">=</span> cy<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> k <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> k <span class="k3">&lt;</span> segments<span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span></td></tr><tr><td class="number">8</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">9</td><td>      doLine<span class="k2">(</span>oldcx,oldcy,cx,cy,color<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>      oldcx <span class="k3">=</span> cx<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>      oldcy <span class="k3">=</span> cy<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      cx <span class="k3">+</span><span class="k3">=</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>      cy <span class="k3">+</span><span class="k3">=</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      angle <span class="k3">+</span><span class="k3">=</span> angleInc<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">16</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
I&#39;d like to be able to have my round rect routine to be something like:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> doRoundRect<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> width, <span class="k1">int</span> height, <span class="k1">float</span> radius<span class="k2">)</span>
<span class="k2">{</span>
        doLine<span class="k2">(</span>x<span class="k3">+</span>radius, y, x<span class="k3">+</span>width-radius, y<span class="k2">)</span><span class="k2">;</span>
  doLine<span class="k2">(</span>x<span class="k3">+</span>radius, y<span class="k3">+</span>height, x<span class="k3">+</span>width-radius,y<span class="k3">+</span>height<span class="k2">)</span><span class="k2">;</span>
  doLine<span class="k2">(</span>x, y<span class="k3">+</span>radius,x, y<span class="k3">+</span>height-radius<span class="k2">)</span><span class="k2">;</span>
  doLine<span class="k2">(</span>x<span class="k3">+</span>width, y<span class="k3">+</span>radius,x<span class="k3">+</span>width, y<span class="k3">+</span>height-radius<span class="k2">)</span><span class="k2">;</span>
        <span class="c">// Needs arcs</span>
<span class="k2">}</span>
</pre></div></div><p>
Perhaps my arc routine is bad? Any suggestions?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (juvinious)</author>
		<pubDate>Thu, 08 Feb 2007 22:43:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I haven&#39;t tried running your code or anything yet, but a few comments:<br />1.  I would guess that the stuff you want after the &quot;// Needs arcs&quot; comment should look roughly like:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">enum</span> <span class="k2">{</span>NUM_ARC_SEGMENTS<span class="k3">=</span><span class="n">4</span><span class="k2">}</span><span class="k2">;</span>
doArc<span class="k2">(</span>x<span class="k3">+</span>radius, y<span class="k3">+</span>radius, NUM_ARC_SEGMENTS, radius, <span class="n">180</span>, <span class="n">90</span><span class="k2">)</span><span class="k2">;</span>
doArc<span class="k2">(</span>x<span class="k3">+</span>radius, y<span class="k3">+</span>height-radius, NUM_ARC_SEGMENTS, radius, <span class="n">90</span>, <span class="n">90</span><span class="k2">)</span><span class="k2">;</span>
doArc<span class="k2">(</span>x<span class="k3">+</span>width-radius, y<span class="k3">+</span>radius, NUM_ARC_SEGMENTS, radius, <span class="n">270</span>, <span class="n">90</span><span class="k2">)</span><span class="k2">;</span>
doArc<span class="k2">(</span>x<span class="k3">+</span>width-radius, y<span class="k3">+</span>height-radius, NUM_ARC_SEGMENTS, radius, <span class="n">0</span>, <span class="n">90</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
2.  You&#39;re doArc is a bit weird I think.  The problem is that you use angle as both the angle from the center to the edge of the circle and as the angle along the edge of the circle - these two angles are supposed to be perpendicular to each other, not the same.  <br />Here&#39;s an example of changing it to use only the angle from the center:
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> k <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> k <span class="k3">&lt;</span> segments<span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k2">{</span>
      doLine<span class="k2">(</span>oldangle,lor<span class="k2">)</span><span class="k2">;</span>
      oldcx <span class="k3">=</span> cx<span class="k2">;</span>
      oldcy <span class="k3">=</span> cy<span class="k2">;</span>
      cx <span class="k3">+</span><span class="k3">=</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      cy <span class="k3">+</span><span class="k3">=</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      angle <span class="k3">+</span><span class="k3">=</span> angleInc<span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
changes to 
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> k <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> k <span class="k3">&lt;</span> segments<span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k2">{</span>
      angle <span class="k3">+</span><span class="k3">=</span> angleInc<span class="k2">;</span>
      cx <span class="k3">=</span> centerX <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      cy <span class="k3">=</span> centerY <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      doLine<span class="k2">(</span>oldcx,oldcy,cx,cy,color<span class="k2">)</span><span class="k2">;</span>
      oldcx <span class="k3">=</span> cx<span class="k2">;</span>
      oldcy <span class="k3">=</span> cy<span class="k2">;</span>
    <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>
Whereas, here&#39;s how to change it to use the old concept with the correct angles:
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">float</span> angle <span class="k3">=</span> startAngle <span class="k3">*</span> <span class="n">3</span>.<span class="n">14159265</span> <span class="k3">/</span> <span class="n">180</span><span class="k2">;</span> <span class="c">// initial angle in radians</span>
    <span class="k1">float</span> angleInc <span class="k3">=</span> sweep <span class="k3">*</span> <span class="n">3</span>.<span class="n">14159265</span> <span class="k3">/</span><span class="k2">(</span><span class="n">180</span> <span class="k3">*</span> segments<span class="k2">)</span><span class="k2">;</span> <span class="c">// angle increment</span>
    <span class="k1">float</span> cx <span class="k3">=</span> centerX <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span>, cy <span class="k3">=</span> centerY <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
    <span class="k1">float</span> oldcx <span class="k3">=</span> cx, oldcy <span class="k3">=</span> cy<span class="k2">;</span>
</pre></div></div><p>
change so:
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">float</span> angle <span class="k3">=</span> startAngle <span class="k3">*</span> <span class="n">3</span>.<span class="n">14159265</span> <span class="k3">/</span> <span class="n">180</span><span class="k2">;</span> <span class="c">// initial angle in radians</span>
    <span class="k1">float</span> angleInc <span class="k3">=</span> sweep <span class="k3">*</span> <span class="n">3</span>.<span class="n">14159265</span> <span class="k3">/</span><span class="k2">(</span><span class="n">180</span> <span class="k3">*</span> segments<span class="k2">)</span><span class="k2">;</span> <span class="c">// angle increment</span>
    <span class="k1">float</span> cx <span class="k3">=</span> centerX <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span>, cy <span class="k3">=</span> centerY <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
    <span class="k1">float</span> oldcx <span class="k3">=</span> cx, oldcy <span class="k3">=</span> cy<span class="k2">;</span>
    angle <span class="k3">+</span><span class="k3">=</span> <span class="n">3</span>.<span class="n">14159265</span><span class="k3">/</span><span class="n">2</span><span class="k2">;</span>
    radius <span class="k3">/</span><span class="k3">=</span> segments<span class="k2">;</span><span class="c">//not sure about this line...</span>
</pre></div></div><p>
actually... I think screwed that one up... but that&#39;s the idea : )<br />edit:<br />oh yeah... why is k starting at 1 instead of 0?<br />and the other problem was that you used the radius as the length of each segment, which it&#39;s not.  (the length of each segment is equal to the radius times (angleInc converted to radians)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (orz)</author>
		<pubDate>Thu, 08 Feb 2007 23:10:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> roundRect<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="k1">int</span> x1, <span class="k1">int</span> y1, <span class="k1">int</span> x2, <span class="k1">int</span> y2, <span class="k1">int</span> r, <span class="k1">int</span> c<span class="k2">)</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, x1<span class="k3">+</span>r, y1, x2-r, c<span class="k2">)</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, x1<span class="k3">+</span>r, y2, x2-r, c<span class="k2">)</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, x1, y1<span class="k3">+</span>r, y2-r, c<span class="k2">)</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, x2, y1<span class="k3">+</span>r, y2-r, c<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span>bmp, x1<span class="k3">+</span>r, y1<span class="k3">+</span>r,  <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">64</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">128</span><span class="k2">)</span>, r, c<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span>bmp, x2-r, y1<span class="k3">+</span>r,   <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">0</span><span class="k2">)</span>,  <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">64</span><span class="k2">)</span>, r, c<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span>bmp, x1<span class="k3">+</span>r, y2-r, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">128</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">192</span><span class="k2">)</span>, r, c<span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span>bmp, x2-r, y2-r, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">192</span><span class="k2">)</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span><span class="n">256</span><span class="k2">)</span>, r, c<span class="k2">)</span><span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (vbovio)</author>
		<pubDate>Thu, 08 Feb 2007 23:11:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Heh... vbovio&#39;s response is far more useful if you just want it to work : )
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (orz)</author>
		<pubDate>Thu, 08 Feb 2007 23:15:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This is what I made a while ago and it looks just like vbovio&#39;s</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> drawRoundedRect<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap, <span class="k1">int</span> x1, <span class="k1">int</span> y1, <span class="k1">int</span> x2, <span class="k1">int</span> y2, <span class="k1">int</span> radius, <span class="k1">int</span> color <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>    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span> bitmap, x1 <span class="k3">+</span> radius, y1 <span class="k3">+</span> radius, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>  <span class="n">64</span> <span class="k2">)</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span> <span class="n">128</span> <span class="k2">)</span>, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span> bitmap, x2 <span class="k3">-</span> radius, y1 <span class="k3">+</span> radius, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>   <span class="n">0</span> <span class="k2">)</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>  <span class="n">64</span> <span class="k2">)</span>, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span> bitmap, x2 <span class="k3">-</span> radius, y2 <span class="k3">-</span> radius, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span> <span class="n">192</span> <span class="k2">)</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span>   <span class="n">0</span> <span class="k2">)</span>, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>    <a href="http://www.allegro.cc/manual/arc" target="_blank"><span class="a">arc</span></a><span class="k2">(</span> bitmap, x1 <span class="k3">+</span> radius, y2 <span class="k3">-</span> radius, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span> <span class="n">128</span> <span class="k2">)</span>, <a href="http://www.allegro.cc/manual/itofix" target="_blank"><span class="a">itofix</span></a><span class="k2">(</span> <span class="n">192</span> <span class="k2">)</span>, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span> bitmap, x1 <span class="k3">+</span> radius, y1, x2 <span class="k3">-</span> radius, y1, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span> bitmap, x1 <span class="k3">+</span> radius, y2, x2 <span class="k3">-</span> radius, y2, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span> bitmap, x1, y1 <span class="k3">+</span> radius, x1, y2 <span class="k3">-</span> radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">11</td><td>    <a href="http://www.allegro.cc/manual/line" target="_blank"><span class="a">line</span></a><span class="k2">(</span> bitmap, x2, y1 <span class="k3">+</span> radius, x2, y2 <span class="k3">-</span> radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td><span class="k2">}</span></td></tr><tr><td class="number">13</td><td>&#160;</td></tr><tr><td class="number">14</td><td><span class="k1">void</span> drawRoundedFilledRect<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>bitmap, <span class="k1">int</span> x1, <span class="k1">int</span> y1, <span class="k1">int</span> x2, <span class="k1">int</span> y2, <span class="k1">int</span> radius, <span class="k1">int</span> color <span class="k2">)</span></td></tr><tr><td class="number">15</td><td><span class="k2">{</span></td></tr><tr><td class="number">16</td><td>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span> bitmap, x1 <span class="k3">+</span> radius, </td></tr><tr><td class="number">17</td><td>                      y1, </td></tr><tr><td class="number">18</td><td>                      x2 <span class="k3">-</span> radius, </td></tr><tr><td class="number">19</td><td>                      y2, </td></tr><tr><td class="number">20</td><td>                      color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span> bitmap, x1, </td></tr><tr><td class="number">23</td><td>                      y1 <span class="k3">+</span> radius, </td></tr><tr><td class="number">24</td><td>                      x1 <span class="k3">+</span> radius, </td></tr><tr><td class="number">25</td><td>                      y2 <span class="k3">-</span> radius, </td></tr><tr><td class="number">26</td><td>                      color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>&#160;</td></tr><tr><td class="number">28</td><td>    <a href="http://www.allegro.cc/manual/rectfill" target="_blank"><span class="a">rectfill</span></a><span class="k2">(</span> bitmap, x2 <span class="k3">-</span> radius, </td></tr><tr><td class="number">29</td><td>                      y1 <span class="k3">+</span> radius, </td></tr><tr><td class="number">30</td><td>                      x2, </td></tr><tr><td class="number">31</td><td>                      y2 <span class="k3">-</span> radius, </td></tr><tr><td class="number">32</td><td>                      color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">33</td><td>&#160;</td></tr><tr><td class="number">34</td><td>    <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span> bitmap, x1 <span class="k3">+</span> radius, y1 <span class="k3">+</span> radius, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>    <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span> bitmap, x2 <span class="k3">-</span> radius, y1 <span class="k3">+</span> radius, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">36</td><td>    <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span> bitmap, x1 <span class="k3">+</span> radius, y2 <span class="k3">-</span> radius, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>    <a href="http://www.allegro.cc/manual/circlefill" target="_blank"><span class="a">circlefill</span></a><span class="k2">(</span> bitmap, x2 <span class="k3">-</span> radius, y2 <span class="k3">-</span> radius, radius, color <span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (DanielH)</author>
		<pubDate>Thu, 08 Feb 2007 23:39:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>vbovio: I&#39;m not using allegro, although usefull in terms of getting it done it doesn&#39;t help me in the understanding of my problem. Specifically in regards to creating an arc.</p><p>orz: Thanks for the input, the suggestions you provided gave me better results with my dealing with the problem, though I&#39;m still not seeing it.<br />About the arc routine I snagged it off the net after a search with google, so I can assume that it&#39;s not perfect or even correct. Utilizing your changes this is what it looks like, better than what I was trying to do in any event:</p><p><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/cache/7/0/703e51ee8a91b0aa068d51c53cef37f3.jpg" alt="591177" width="205" height="182" /></p><p>edit: oops had a problem, it&#39;s there now... It&#39;s all in blue</p><p>edit2: that looks bad, I uploaded one in white
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (juvinious)</author>
		<pubDate>Thu, 08 Feb 2007 23:44:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you trying to get a working function, or to understand the math of an arc-drawing function?  </p><p>For a working function, just use vbovio&#39;s code.  </p><p>For the math of an arc-drawing function:</p><p>the first fix I proposed contained 2 errors that I&#39;ve noticed:<br />1a: I didn&#39;t change the starting value of k to 0 (I don&#39;t know why it was 1, but that isn&#39;t right).  Otherwise, the function skips the last segment.  <br />1b: I forgot to multiply the distance from the center by the radius.  <br />Thus:
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> k <span class="k3">=</span> <span class="n">1</span><span class="k2">;</span> k <span class="k3">&lt;</span> segments<span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k2">{</span>
      angle <span class="k3">+</span><span class="k3">=</span> angleInc<span class="k2">;</span>
      cx <span class="k3">=</span> centerX <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      cy <span class="k3">=</span> centerY <span class="k3">+</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      doLine<span class="k2">(</span>oldcx,oldcy,cx,cy,color<span class="k2">)</span><span class="k2">;</span>
      oldcx <span class="k3">=</span> cx<span class="k2">;</span>
      oldcy <span class="k3">=</span> cy<span class="k2">;</span>
    <span class="k2">}</span>
</pre></div></div><p>
should be:
</p><div class="source-code snippet"><div class="inner"><pre>    <span class="k1">for</span><span class="k2">(</span><span class="k1">unsigned</span> <span class="k1">int</span> k <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> k <span class="k3">&lt;</span> segments<span class="k2">;</span> k<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
    <span class="k2">{</span>
      angle <span class="k3">+</span><span class="k3">=</span> angleInc<span class="k2">;</span>
      cx <span class="k3">=</span> centerX <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      cy <span class="k3">=</span> centerY <span class="k3">+</span> radius <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">;</span>
      doLine<span class="k2">(</span>oldcx,oldcy,cx,cy,color<span class="k2">)</span><span class="k2">;</span>
      oldcx <span class="k3">=</span> cx<span class="k2">;</span>
      oldcy <span class="k3">=</span> cy<span class="k2">;</span>
    <span class="k2">}</span>
</pre></div></div><p>

The idea here is that we break up our arc of D degrees into N sub-arcs of D/N degrees, and we aproximate each subarc with a straight line connecting the endpoints.  Each endpoint is calculated separately.  </p><p>The second, alternative fix I proposed contains... flaws...<br />Just to be clear, the second fix, the one where the angle had PI/2 added to it to so that the angle was the angle along the edge rather than from the center, should NOT be combined with the first fix.  They are alternatives to each other.  <br />Anyway, the flaws:<br />2a.  The names I used were misleading, chosen just to make the code changes as small as possible.  Radius wasn&#39;t really conceptually divided by the number of segments, it&#39;s just that the scale of how far (cx,cy) was from the previous position for each segmented needed to be divided by the number of segments.  New variables could be declared to hold the segment length to fix this... non-bug, but still an issue.  <br />2b.  even so, the segment length calculated was still wrong.  Instead of radius/segments it should be something like... radius*angleInc, but, actually, even that only works if angleInc is small, otherwise the math is messier... maybe radius * sqrt(sqr(sin(angleInc)) + 1 + sqr(cos(angleInc)) - 2*cos(angleInc))... or maybe... equivalently?... radius * sin(angleInc) / sin((PI-angleInc)/2)... bleh, I&#39;m getting confused<br />so... don&#39;t use method 2.  it&#39;s too much work.  <br />2c.  the angle used was the angle at the point on the circle in question, ie the begining of each subarc, should have been the angle along the middle of the subarc... can fix by adding angleInc/2</p><p>The idea of the second method was generally similar...<br />we break up our arc of D degrees into N sub-arcs of D/N degrees, and we aproximate each subarc with a straight line connecting the endpoints.  <br />The difference is that endpoints are not calculated seperately... instead the first endpoint is calculated, and we figure that the arc is a line curving at a fixed rate, so we can calculate further endpoints progressively from the previous one.  But this introduces an extra problem, because for this method we need to know the straight-line distance between each pair of endpoints, and that&#39;s a little messy to calculate... my best guess is radius * sin(angleInc) / sin((PI-angleInc)/2) (which, if angleInc is small, is aproximately radius * angleInc)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (orz)</author>
		<pubDate>Fri, 09 Feb 2007 00:55:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>orz: Ah ok I misread what you were saying, but now I get what you were conveying. Thanks for the help, it works as expected now.<br />And thanks to the others for their input. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (juvinious)</author>
		<pubDate>Fri, 09 Feb 2007 03:38:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You could just take the rounded rectangle rendering code from OpenLayer <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Fri, 09 Feb 2007 19:32:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Heh, well I looked at Rectangle.cpp if that&#39;s what you are talking about. Either I didn&#39;t see it or couldn&#39;t figure it out. <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (juvinious)</author>
		<pubDate>Fri, 09 Feb 2007 22:08:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Search for the part which begins: if( roundness &gt; 0.0 )
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Fladimir da Gorf)</author>
		<pubDate>Sat, 10 Feb 2007 03:18:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can modify the equation of the circle to create rounded rectangles.<br />r^n = x^n + y^n (n &gt; 1)<br />The higher &#39;n&#39;, the less rounded your rectangle would look.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mr. Big)</author>
		<pubDate>Sat, 10 Feb 2007 22:06:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>look for SuperEllipse equation; and SuperQuadrics in general, you can find interesting shapes using their equations, rounded rects can be achieved with superellipses.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (vbovio)</author>
		<pubDate>Sun, 11 Feb 2007 12:58:57 +0000</pubDate>
	</item>
</rss>
