<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Angle Vectoring</title>
		<link>http://www.allegro.cc/forums/view/586114</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Fri, 30 Jun 2006 02:10:31 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ok...I&#39;d first like to say hello again to everyone <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />...it&#39;s been a while since I&#39;ve been able to get back here.</p><p>Here&#39;s my question:<br />How do you find the angle between two points. I am trying to find this angle so I can vector the object to the target, such as a homing missle. The structure would have at least:</p><p>typedef struct _Object<br />{<br />   float x, y, angle, vel;<br />}Object;</p><p>I&#39;ve looked at a couple of math equations, but I may be doing something wrong or I am just totally confused. <img src="http://www.allegro.cc/forums/smileys/cry.gif" alt=":&#39;(" /></p><p>To find the vector:<br />V = V&lt;x = player.x - target.x, y = player.y - target.y&gt;<br />To find the length of the vector: (Also just the distance from (0,0)-(Vx,Vy) )<br />Vlen = sqrt(V.x*V.x+V.y*V.y);</p><p>I think you use the DOT Product to find the angle, but when I try it...it doesn&#39;t seem to work for me: <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /><br />DotProduct = -cos(angle) = &lt;Ux*Vx+Uy*Vy&gt; / |U| * |V|<br />where |U| &amp; |V| is the length of U &amp; V respectfully.</p><p>The goal is to find the angle from (player.x, player.y) to (target.x, target.y) so I can determine where to turn left / right or keep on current angle to reach target.</p><p>Thanks in advance.<br />(Please...any math problems...please explain. I get confused with some of the expressions and stuff) <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Don Freeman)</author>
		<pubDate>Mon, 26 Jun 2006 20:59:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Here&#39;s some console prog stuff to demonstrate radians to polar coords and vice versa</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>&#160;</td></tr><tr><td class="number">2</td><td> <span class="c">// polar coordinates to rectangular</span></td></tr><tr><td class="number">3</td><td>&#160;</td></tr><tr><td class="number">4</td><td><span class="p">#include &lt;stdio.h&gt;</span></td></tr><tr><td class="number">5</td><td><span class="p">#include &lt;stdlib.h&gt;</span></td></tr><tr><td class="number">6</td><td><span class="p">#include &lt;math.h&gt;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td><span class="k1">double</span> x,y<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> angle,radius<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>&#160;</td></tr><tr><td class="number">12</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span></td></tr><tr><td class="number">13</td><td><span class="k2">{</span></td></tr><tr><td class="number">14</td><td>&#160;</td></tr><tr><td class="number">15</td><td>angle <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_776.html" target="_blank">strtod</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>radius <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_776.html" target="_blank">strtod</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>&#160;</td></tr><tr><td class="number">18</td><td><span class="c">//convert degrees to radians</span></td></tr><tr><td class="number">19</td><td>angle <span class="k3">=</span> angle <span class="k3">*</span> M_PI<span class="k3">/</span><span class="n">180</span>.<span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>y <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> radius<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>x <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> radius<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>&#160;</td></tr><tr><td class="number">24</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">"\nx is %f y is %f"</span>,x,y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td><span class="k2">}</span> <span class="c">//end</span></td></tr><tr><td class="number">28</td><td>&#160;</td></tr><tr><td class="number">29</td><td> <span class="c">//rectangular coordinates to polar</span></td></tr><tr><td class="number">30</td><td>&#160;</td></tr><tr><td class="number">31</td><td><span class="p">#include &lt;stdio.h&gt;</span></td></tr><tr><td class="number">32</td><td><span class="p">#include &lt;stdlib.h&gt;</span></td></tr><tr><td class="number">33</td><td><span class="p">#include &lt;math.h&gt;</span></td></tr><tr><td class="number">34</td><td>&#160;</td></tr><tr><td class="number">35</td><td><span class="k1">double</span> x,y<span class="k2">;</span></td></tr><tr><td class="number">36</td><td>&#160;</td></tr><tr><td class="number">37</td><td><span class="k1">double</span> x2,y2<span class="k2">;</span></td></tr><tr><td class="number">38</td><td>&#160;</td></tr><tr><td class="number">39</td><td><span class="k1">double</span> angle,radius<span class="k2">;</span></td></tr><tr><td class="number">40</td><td>&#160;</td></tr><tr><td class="number">41</td><td><span class="k1">double</span> tmpangle<span class="k2">;</span></td></tr><tr><td class="number">42</td><td>&#160;</td></tr><tr><td class="number">43</td><td><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span></td></tr><tr><td class="number">44</td><td><span class="k2">{</span></td></tr><tr><td class="number">45</td><td>&#160;</td></tr><tr><td class="number">46</td><td>x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_776.html" target="_blank">strtod</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">47</td><td>y <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_776.html" target="_blank">strtod</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">48</td><td>&#160;</td></tr><tr><td class="number">49</td><td>radius <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_738.html" target="_blank">sqrt</a><span class="k2">(</span>x<span class="k3">*</span>x<span class="k3">+</span>y<span class="k3">*</span>y<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">50</td><td>&#160;</td></tr><tr><td class="number">51</td><td><span class="c">//if( (x*y) &lt; 0.0) radius = radius * -1.0;</span></td></tr><tr><td class="number">52</td><td>&#160;</td></tr><tr><td class="number">53</td><td>x2 <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_46.html" target="_blank">asin</a><span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_303.html" target="_blank">fabs</a><span class="k2">(</span>x<span class="k2">)</span><span class="k3">/</span>radius<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">54</td><td>&#160;</td></tr><tr><td class="number">55</td><td><span class="c">//this would work just as well as the above, they come out the same</span></td></tr><tr><td class="number">56</td><td><span class="c">//y2 = acos(y/radius) * 180.0/M_PI;</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>tmpangle <span class="k3">=</span> x2<span class="k2">;</span></td></tr><tr><td class="number">60</td><td><span class="k1">if</span><span class="k2">(</span>y<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span></td></tr><tr><td class="number">61</td><td><span class="k2">{</span></td></tr><tr><td class="number">62</td><td><span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> tmpangle <span class="k3">=</span> M_PI <span class="k3">*</span> <span class="n">2</span>.<span class="n">0</span> <span class="k3">-</span> x2<span class="k2">;</span></td></tr><tr><td class="number">63</td><td><span class="k1">else</span></td></tr><tr><td class="number">64</td><td>tmpangle <span class="k3">=</span> x2 <span class="k3">+</span> M_PI<span class="k2">;</span></td></tr><tr><td class="number">65</td><td><span class="k2">}</span></td></tr><tr><td class="number">66</td><td><span class="k1">else</span></td></tr><tr><td class="number">67</td><td><span class="k1">if</span><span class="k2">(</span>x<span class="k3">&lt;</span><span class="n">0</span><span class="k2">)</span> tmpangle <span class="k3">=</span> M_PI <span class="k3">-</span> x2<span class="k2">;</span></td></tr><tr><td class="number">68</td><td>&#160;</td></tr><tr><td class="number">69</td><td>x2 <span class="k3">=</span> tmpangle <span class="k3">*</span> <span class="n">180</span>.<span class="n">0</span><span class="k3">/</span>M_PI<span class="k2">;</span></td></tr><tr><td class="number">70</td><td>&#160;</td></tr><tr><td class="number">71</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">"\n%f degrees at %f unit distance"</span>,x2,radius<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">72</td><td>&#160;</td></tr><tr><td class="number">73</td><td><span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">74</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

gcc math lib is probably necessary, -lm.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Mon, 26 Jun 2006 21:46:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks! I knew I was missing something...but I couldn&#39;t think of what it was! Had to convert radians to polar coords...just didn&#39;t know how! Thanks again! Now...where did I leave off with this program....::)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Don Freeman)</author>
		<pubDate>Mon, 26 Jun 2006 21:51:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code"><a href="http://www.delorie.com/djgpp/doc/libc/libc_50.html" target="_blank">atan2</a></span><br />EDIT: It should work better than the code above, as atan2 handles all cases intenally. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Krzysztof Kluczek)</author>
		<pubDate>Mon, 26 Jun 2006 21:54:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Or use dot product.</p><p>Amarillion has a great tutorial about sin, cos and all that stuff. It should be at pixwiki, but now bafsoft server seems down so I can&#39;t find it. Anyway, I have a copy of most of pixelate tuts so I&#39;ve attached the tutorial, wich includes both atan2 and dot product examples.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Niunio)</author>
		<pubDate>Tue, 27 Jun 2006 00:26:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>atan2, huh!  I don&#39;t remember why I did the above code (years ago), maybe it was so I could do it in asm as well, or maybe my compiler didn&#39;t <u>have</u> an atan2 then.  I thought it wasn&#39;t supported by all compilers but dj info says it&#39;s ANSI.  Learn something new every day.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Wed, 28 Jun 2006 23:44:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The dot product is overkill for 2 dimensions. I&#39;d use atan2.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Fri, 30 Jun 2006 02:10:31 +0000</pubDate>
	</item>
</rss>
