<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Forgotten mana...</title>
		<link>http://www.allegro.cc/forums/view/566564</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 14 Feb 2006 04:08:51 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok...this topic has been punished enough, but I can&#39;t find it using allegro/forums/search at the moment.</p><p>Questions is:</p><p>I am rotating a sprite using allegro&#39;s rotate_sprite(...) function. I want the image to move in the same direction as the angle is. I&#39;ve done this before, but it&#39;s been a long time ago. I know it&#39;s got something to do with converting radians to degrees...converting degrees to allegro degrees...conjuring magical dragons...and all that, but I can&#39;t remember.</p><div class="source-code snippet"><div class="inner"><pre><span class="c">////////////////////////////////////////////////////////////////</span>
<span class="c">// in the update routine:</span>
xVel <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="k3">*</span> vel<span class="k2">;</span>
yVel <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="k3">*</span> vel<span class="k2">;</span>
x <span class="k3">+</span><span class="k3">=</span> xVel<span class="k2">;</span>
y <span class="k3">+</span><span class="k3">=</span> yVel<span class="k2">;</span>
<span class="c">////////////////////////////////////////////////////////////////</span>
<span class="c">// then in drawing routine:</span>
<a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>pDest,pBmp,x<span class="k3">+</span>pBmp-&gt;w<span class="k3">/</span><span class="n">2</span>,y<span class="k3">+</span>pBmp-&gt;h<span class="k3">/</span><span class="n">2</span>,<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>
<span class="c">////////////////////////////////////////////////////////////////</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Don Freeman)</author>
		<pubDate>Mon, 13 Feb 2006 22:05:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://pixwiki.bafsoft.com/mags/5/articles/circle/sincos.htm">Sin &amp; Cos: The Programmer&#39;s Pals!</a>, see the <i>Using atan2(): homing missiles</i> section.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ReyBrujo)</author>
		<pubDate>Mon, 13 Feb 2006 22:22:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here is my code sample:</p><p>The image is a simple triangle with a white line facing north.</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="c">//////////////////////////////////////////////////////////////////////////////////////////////////</span></td></tr><tr><td class="number">2</td><td>Player::Player<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">3</td><td><span class="k2">{</span></td></tr><tr><td class="number">4</td><td>  x <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  y <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  vel <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  xVel  <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  yVel  <span class="k3">=</span> <span class="n">0</span>.<span class="n">0f</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  angle <span class="k3">=</span> GetRadians<span class="k2">(</span><span class="n">0</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  pWeapon <span class="k3">=</span> <span class="k1">new</span> Weapon<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  pBmp <span class="k3">=</span> NULL<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>Player::~Player<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">14</td><td><span class="k2">{</span></td></tr><tr><td class="number">15</td><td>  <span class="k1">if</span> <span class="k2">(</span> pWeapon <span class="k2">)</span></td></tr><tr><td class="number">16</td><td>    <span class="k1">delete</span> pWeapon<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  pWeapon <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  <span class="k1">if</span> <span class="k2">(</span> pBmp <span class="k2">)</span></td></tr><tr><td class="number">19</td><td>    <a href="http://www.allegro.cc/manual/destroy_bitmap" target="_blank"><span class="a">destroy_bitmap</span></a><span class="k2">(</span>pBmp<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>  pBmp <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">21</td><td><span class="k2">}</span></td></tr><tr><td class="number">22</td><td><span class="k1">void</span> Player::Display<span class="k2">(</span> <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a> <span class="k3">*</span>pDest <span class="k2">)</span></td></tr><tr><td class="number">23</td><td><span class="k2">{</span></td></tr><tr><td class="number">24</td><td>  <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span>pBmp <span class="k2">)</span></td></tr><tr><td class="number">25</td><td>    <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  <span class="k1">if</span> <span class="k2">(</span> <span class="k3">!</span>pDest <span class="k2">)</span></td></tr><tr><td class="number">27</td><td>    <span class="k1">return</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>pDest,pBmp,x<span class="k3">+</span>pBmp-&gt;w<span class="k3">/</span><span class="n">2</span>,y<span class="k3">+</span>pBmp-&gt;h<span class="k3">/</span><span class="n">2</span>,<a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>GetDegrees<span class="k2">(</span>angle<span class="k2">)</span><span class="k3">*</span><span class="k2">(</span><span class="n">40</span>.<span class="n">74366543153</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td><span class="k2">}</span></td></tr><tr><td class="number">30</td><td><span class="k1">void</span> Player::Update<span class="k2">(</span> <span class="k1">void</span> <span class="k2">)</span></td></tr><tr><td class="number">31</td><td><span class="k2">{</span></td></tr><tr><td class="number">32</td><td>  xVel <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span> GetDegrees<span class="k2">(</span> angle <span class="k2">)</span> <span class="k2">)</span> <span class="k3">*</span> vel<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  yVel <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span> GetDegrees<span class="k2">(</span> angle <span class="k2">)</span> <span class="k2">)</span> <span class="k3">*</span> vel<span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  x <span class="k3">+</span><span class="k3">=</span> xVel<span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  y <span class="k3">+</span><span class="k3">=</span> yVel<span class="k2">;</span></td></tr><tr><td class="number">36</td><td>  pWeapon-&gt;Update<span class="k2">(</span><span class="k3">*</span><span class="k1">this</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">37</td><td><span class="k2">}</span></td></tr><tr><td class="number">38</td><td><span class="c">// Degrees = radians * 180 / PI</span></td></tr><tr><td class="number">39</td><td><span class="c">// Radians = degrees * PI / 180</span></td></tr><tr><td class="number">40</td><td><span class="c">// const float Rad2AllegroDeg = 40.74366543153; </span></td></tr><tr><td class="number">41</td><td><span class="c">// float radian = whatever;</span></td></tr><tr><td class="number">42</td><td><span class="c">// float AllegroDeg = radians * Rad2AllegroDeg; </span></td></tr><tr><td class="number">43</td><td><span class="c">//////////////////////////////////////////////////////////////////////////////////////////////////</span></td></tr><tr><td class="number">44</td><td><span class="k1">float</span> GetDegrees<span class="k2">(</span> <span class="k1">float</span> radians <span class="k2">)</span></td></tr><tr><td class="number">45</td><td><span class="k2">{</span></td></tr><tr><td class="number">46</td><td>  <span class="k1">return</span> <span class="k2">(</span>radians <span class="k3">*</span> <span class="n">180</span> <span class="k3">/</span> PI<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td><span class="k2">}</span></td></tr><tr><td class="number">48</td><td><span class="c">//////////////////////////////////////////////////////////////////////////////////////////////////</span></td></tr><tr><td class="number">49</td><td><span class="k1">float</span> GetRadians<span class="k2">(</span> <span class="k1">float</span> degrees <span class="k2">)</span></td></tr><tr><td class="number">50</td><td><span class="k2">{</span></td></tr><tr><td class="number">51</td><td>  <span class="k1">return</span> <span class="k2">(</span>degrees <span class="k3">*</span> PI <span class="k3">/</span> <span class="n">180</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><span class="c">//////////////////////////////////////////////////////////////////////////////////////////////////</span></td></tr></tbody></table></div></div><p>

I know I am just doing a conversion wrong somewhere...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Don Freeman)</author>
		<pubDate>Mon, 13 Feb 2006 23:03:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>angle = 1.0; //radians<br />angle *= 180.0/M_PI;  //now it&#39;s degrees<br />angle *= 65536.0;     //now it&#39;s suitable for rotate_sprite</p><p>That <u>should</u> work, money back guarantee
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Tue, 14 Feb 2006 00:22:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Arthur: that doesn&#39;t work. rotate_sprite needs a value between 0 and 255.</p><div class="source-code snippet"><div class="inner"><pre>  xVel <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_113.html" target="_blank">cos</a><span class="k2">(</span> GetDegrees<span class="k2">(</span> angle <span class="k2">)</span> <span class="k2">)</span> <span class="k3">*</span> vel<span class="k2">;</span>
  yVel <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span> GetDegrees<span class="k2">(</span> angle <span class="k2">)</span> <span class="k2">)</span> <span class="k3">*</span> vel<span class="k2">;</span>
</pre></div></div><p>

These functions take radians, not degrees. Assuming angle is in radians (can&#39;t deduce that from the code), you can use it directly here without converting.</p><p>And you can use this (shorter) code:
</p><div class="source-code snippet"><div class="inner"><pre>  <a href="http://www.allegro.cc/manual/rotate_sprite" target="_blank"><span class="a">rotate_sprite</span></a><span class="k2">(</span>pDest,pBmp,x<span class="k3">+</span>pBmp-&gt;w<span class="k3">/</span><span class="n">2</span>,y<span class="k3">+</span>pBmp-&gt;h<span class="k3">/</span><span class="n">2</span>, <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a><span class="k2">(</span>angle <span class="k3">*</span> <span class="n">128</span> <span class="k3">/</span> PI<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>


edit:<br />Here are they all:</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="c">//radians to degrees:</span></td></tr><tr><td class="number">2</td><td><span class="k1">float</span> degrees <span class="k3">=</span> radians <span class="k3">*</span> <span class="n">180</span> <span class="k3">/</span> PI<span class="k2">;</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="c">//degrees to radians:</span></td></tr><tr><td class="number">5</td><td><span class="k1">float</span> radians <span class="k3">=</span> degrees <span class="k3">*</span> PI <span class="k3">/</span> <span class="n">180</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td><span class="c">//degrees to allegro degrees</span></td></tr><tr><td class="number">8</td><td>fix al_deg <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span>degrees <span class="k3">*</span> <span class="n">256</span> <span class="k3">/</span> <span class="n">360</span><span class="k2">)</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="c">//allegro degrees to degrees</span></td></tr><tr><td class="number">11</td><td><span class="k1">float</span> degrees <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a> <span class="k2">(</span>al_deg<span class="k2">)</span> <span class="k3">*</span> <span class="n">360</span> <span class="k3">/</span> <span class="n">256</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>&#160;</td></tr><tr><td class="number">13</td><td><span class="c">//radians to allegro degrees</span></td></tr><tr><td class="number">14</td><td>fix al_deg <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ftofix" target="_blank"><span class="a">ftofix</span></a> <span class="k2">(</span>radians <span class="k3">*</span> <span class="n">128</span> <span class="k3">/</span> PI<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="c">//allegro degrees to radians</span></td></tr><tr><td class="number">17</td><td><span class="k1">float</span> radians <span class="k3">=</span> <a href="http://www.allegro.cc/manual/fixtof" target="_blank"><span class="a">fixtof</span></a> <span class="k2">(</span>al_deg<span class="k2">)</span> <span class="k3">*</span> PI <span class="k3">/</span> <span class="n">128</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (amarillion)</author>
		<pubDate>Tue, 14 Feb 2006 03:39:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>But you need to convert radians into the fixed angle. Fixed angle is number between 0-255 and therefore you must multiple angle in radians by radtofix() constant. I advice you to have angle in fixed format because it will remove you many headaches.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (OICW)</author>
		<pubDate>Tue, 14 Feb 2006 04:00:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OICW: Only one conversion is necessary in the code above, i.e. when using rotate_sprite. All the other functions use radians.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (amarillion)</author>
		<pubDate>Tue, 14 Feb 2006 04:08:51 +0000</pubDate>
	</item>
</rss>
