<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>move a bmp by an angle</title>
		<link>http://www.allegro.cc/forums/view/585630</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 27 May 2006 17:50:40 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello </p><p>My BITMAP rotate left and right on keypress left and right, but this BITMAP don&#39;t go forward in the right angle on keypress up.</p><p>I think the problem is in calculating coordonate of the bitmap here :</p><p>x += 1 * cos(angle) ;<br />y += 1 * sin(angle) ;</p><p>someone can help the poor English speaker I&#39;m please <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></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="p">#include &lt;allegro.h&gt;</span></td></tr><tr><td class="number">2</td><td><span class="p">#include &lt;time.h&gt;</span></td></tr><tr><td class="number">3</td><td><span class="p">#include &lt;math.h&gt;</span></td></tr><tr><td class="number">4</td><td>&#160;</td></tr><tr><td class="number">5</td><td><span class="p">#define ECRAN_X  800</span></td></tr><tr><td class="number">6</td><td><span class="p">#define ECRAN_Y  600</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="p">#define ERREUR(msg) {\</span></td></tr><tr><td class="number">9</td><td><span class="p">   set_gfx_mode(GFX_TEXT,0,0,0,0);\ </span></td></tr><tr><td class="number">10</td><td><span class="p">   allegro_message("Error : \n%s\n", msg);\ </span></td></tr><tr><td class="number">11</td><td><span class="p">   allegro_exit();\ </span></td></tr><tr><td class="number">12</td><td><span class="p">   return 1;\ </span></td></tr><tr><td class="number">13</td><td><span class="p">} </span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">17</td><td><span class="k2">{</span></td></tr><tr><td class="number">18</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>tank<span class="k2">;</span></td></tr><tr><td class="number">19</td><td><a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>page<span class="k2">;</span></td></tr><tr><td class="number">20</td><td><span class="k1">float</span> angle<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k1">float</span> x, y<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>&#160;</td></tr><tr><td class="number">23</td><td>   <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></td></tr><tr><td class="number">24</td><td>   <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> </td></tr><tr><td class="number">25</td><td>   </td></tr><tr><td class="number">26</td><td>     <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">16</span><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">27</td><td>   <span class="k1">if</span> <span class="k2">(</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, ECRAN_X, ECRAN_Y, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">!</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> </td></tr><tr><td class="number">28</td><td>      ERREUR<span class="k2">(</span><a href="http://www.allegro.cc/manual/allegro_error" target="_blank"><span class="a">allegro_error</span></a><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>   </td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td>   tank<span class="k3">=</span><a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="s">"tank.bmp"</span>,NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>   page<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></td></tr><tr><td class="number">33</td><td>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>tank<span class="k3">|</span><span class="k3">|</span><span class="k3">!</span>page<span class="k2">)</span></td></tr><tr><td class="number">34</td><td>      ERREUR<span class="k2">(</span><span class="s">"load image"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>&#160;</td></tr><tr><td class="number">36</td><td>   x<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_W" target="_blank"><span class="a">SCREEN_W</span></a><span class="k3">/</span><span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td>   y<span class="k3">=</span><a href="http://www.allegro.cc/manual/SCREEN_H" target="_blank"><span class="a">SCREEN_H</span></a><span class="k3">/</span><span class="n">2</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>      </td></tr><tr><td class="number">39</td><td>   <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">40</td><td>      <a href="http://www.allegro.cc/manual/rest" target="_blank"><span class="a">rest</span></a><span class="k2">(</span><span class="n">10</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">41</td><td>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_ESC<span class="k2">]</span> <span class="k2">)</span></td></tr><tr><td class="number">42</td><td>      <span class="k1">return</span><span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">43</td><td>       <span class="k1">if</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></td></tr><tr><td class="number">44</td><td>         <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_LEFT<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">45</td><td>            angle-<span class="k3">=</span><span class="n">0</span>.<span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">47</td><td>         <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_RIGHT<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">48</td><td>            angle<span class="k3">+</span><span class="k3">=</span><span class="n">0</span>.<span class="n">5</span><span class="k2">;</span></td></tr><tr><td class="number">49</td><td>         <span class="k2">}</span></td></tr><tr><td class="number">50</td><td>         <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/key" target="_blank"><span class="a">key</span></a><span class="k2">[</span>KEY_UP<span class="k2">]</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">51</td><td>            x <span class="k3">+</span><span class="k3">=</span> <span class="n">1</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>angle<span class="k2">)</span> <span class="k2">;</span></td></tr><tr><td class="number">52</td><td>            y <span class="k3">+</span><span class="k3">=</span> <span class="n">1</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>angle<span class="k2">)</span> <span class="k2">;</span></td></tr><tr><td class="number">53</td><td>         <span class="k2">}</span>        </td></tr><tr><td class="number">54</td><td>      <span class="k2">}</span>   </td></tr><tr><td class="number">55</td><td>      angle<span class="k3">=</span><span class="k2">(</span>angle&gt;256<span class="k2">)</span>?<span class="n">0</span><span class="k2">:</span>angle<span class="k2">;</span></td></tr><tr><td class="number">56</td><td>      <a href="http://www.allegro.cc/manual/clear_bitmap" target="_blank"><span class="a">clear_bitmap</span></a><span class="k2">(</span>page<span class="k2">)</span><span class="k2">;</span>    </td></tr><tr><td class="number">57</td><td>      </td></tr><tr><td class="number">58</td><td>      <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>page, tank, x, y, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>angle<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>  </td></tr><tr><td class="number">59</td><td>      <a href="http://www.allegro.cc/manual/blit" target="_blank"><span class="a">blit</span></a><span class="k2">(</span>page,<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>    </td></tr><tr><td class="number">60</td><td>   <span class="k2">}</span></td></tr><tr><td class="number">61</td><td>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>  </td></tr><tr><td class="number">62</td><td><span class="k2">}</span></td></tr><tr><td class="number">63</td><td><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></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (evenzzz)</author>
		<pubDate>Sat, 27 May 2006 02:29:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You have to use radians with sin and cos.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (deps)</author>
		<pubDate>Sat, 27 May 2006 02:30:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And cos/sin are in 360 degrees, not 256.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Steve Terry)</author>
		<pubDate>Sat, 27 May 2006 09:57:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>ok</p><p>I try this but it dont work : </p><p>#define DEGREES(x) int((x)/360.0*0xFFFFFF)<br />#define RADIANS(x) int((x)/2/M_PI*0xFFFFFF)</p><p>so i try this :</p><p> x += 10 * (cos((angle * 360 / 256 )) * ( M_PI / 180)) ;<br /> y += 10 * (sin((angle * 360 / 256 )) * ( M_PI / 180)) ;</p><p>both dont work <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (evenzzz)</author>
		<pubDate>Sat, 27 May 2006 12:39:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Tell me something:</p><p><span class="source-code">angle <span class="k3">*</span> <span class="n">360</span> <span class="k3">/</span> <span class="n">256</span></span></p><p>What the hell does it do?</p><p>Try this, but I&#39;m not sure what do you want to do:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">float</span> angle, x, y<span class="k2">;</span>

x <span class="k3">+</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>angle<span class="k3">*</span>M_PI<span class="k3">/</span><span class="n">180</span><span class="k2">)</span><span class="k2">;</span>
y <span class="k3">+</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>angle<span class="k3">*</span>M_PI<span class="k3">/</span><span class="n">180</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CursedTyrant)</author>
		<pubDate>Sat, 27 May 2006 13:22:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>angle * 360 / 256 -&gt; because allegro d&#39;ont rotate over 256°  </p><p>&quot;Allegro uses a bizarre angle format for angles in all graphics commands&quot;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (evenzzz)</author>
		<pubDate>Sat, 27 May 2006 13:39:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It should be <tt>angle_in_degrees * 256 / 360</tt> to turn degrees to Allegro degrees. It&#39;s not that Allegro doesn&#39;t rotate over 256°, Allegro&#39;s degrees are on a scale between 0 and 255. So a full circle in Allegro&#39;s functions is 256 units which is equivalent to 360 degrees. Sin and cos and other standard math functions of course work in radians. So basically you should keep you variables as radians and when you need to pass them to an Allegro function, convert them from radians to Allegro degrees: </p><div class="source-code snippet"><div class="inner"><pre>angle_in degrees <span class="k3">=</span> angle_in_radians <span class="k3">*</span> <span class="n">180</span><span class="k3">/</span>M_PI<span class="k2">;</span>
angle_in_allegro_degrees <span class="k3">=</span> angle_in_degrees <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>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Sat, 27 May 2006 13:46:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank all i find the answer</p><p>if (key[KEY_UP]){<br />            xenemy += enemy_vel * cos(angle) * dt; <br />            yenemy += enemy_vel * sin(angle) * dt;<br />         }  </p><p>rotate_sprite(buffer, enemy, xenemy, yenemy, itofix((angle/2/M_PI*256)));</p><p>it work great !
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (evenzzz)</author>
		<pubDate>Sat, 27 May 2006 14:05:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Steve Terry said:</div><div class="quote"><p>
And cos/sin are in 360 degrees, not 256.
</p></div></div><p>
Say what?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Sat, 27 May 2006 17:50:40 +0000</pubDate>
	</item>
</rss>
