<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Programmering är roligt!</title>
    <link>http://mikael.tylmad.com/</link>
    <description>Mikael skriver om programmering, systemadministration och mycket annat!</description>
    <language>sv</language>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>blosxom/2.1.2</generator>

  <item>
    <title>Ormar, tentakler och atan2</title>
    <pubDate>Sun, 01 Sep 2013 22:00:00 +0200</pubDate>
    <link>http://mikael.tylmad.com/2013/09/01#atan</link>
    <category>/programmering</category>
    <guid isPermaLink="false">http://mikael.tylmad.com/programmering/atan</guid>
    <description>
&lt;p&gt;
  Vad är den gemensamma faktorn mellan ormar, tentakler och atan2? För
  att förklara detta ska jag först berätta lite om tangens, och om ett
  litet problem som programmerare ibland stöter på.
&lt;/p&gt;

&lt;p&gt;
  Lite matematik: Tangens för en vinkel är kvoten av motstående och
  närliggande katet i en rätvinklig triangel. Alltså, om du har
  följande triangel:
&lt;/p&gt;
&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/7/7e/Trigonometry_triangle.svg&quot; style=&quot;margin-left: 15em;&quot;/&gt;
&lt;p&gt;
  ...så är tangens för vinkeln A = a/b. Om man är ute efter att räkna
  ut vinkeln, och känner till både a och b, kan man använda sig av
  inversen av tangens, som också kallas för arcus tangens. Arcus
  tangens av a/b blir vinkeln A.
&lt;/p&gt;

&lt;p&gt;
  Antag nu att vi har punkten (1, 1) på ett koordinatsystem och vill
  ta reda på vinkeln från x-axeln till denna.
&lt;/p&gt;

&lt;p&gt;
  På de flesta lite mer avancerade miniräknarna, eller i nästan alla
  programmeringsspråk, kan man nu använda funktionen atan, och skicka
  med kvoten y/x till denna. 1/1 = 1, och atan(1) = 0.79 rad = 45
  grader. Vad händer nu om vi har punkten (-1, -1) och vill göra samma
  sak?
&lt;/p&gt;

&lt;p&gt;
  Problemet är att -1/-1 = 1, och atan kommer säga att vinkeln är 45
  grader igen, men vi vet att vinkeln är mycket större (närmare
  bestämt 225 grader, eller -135 grader om man går medurs från
  x-axeln). Lösningen på detta kan vara att man inspekterar sidorna
  noga innan man använder atan, och i förväg bestämmer vilken kvadrant
  den resulterande vinkeln kommer befinna sig i, men detta kan vara
  bökigt och det är lätt att det smyger in fel om man inte tänker
  efter.
&lt;/p&gt;

&lt;p&gt;
  Nu kommer funktionen atan2 till användning! De flesta
  programmeringsspråk innehåller atan2, och den anropas alltid med två
  argument: Först y-koordinaten och sedan x-koordinaten. Funktionen
  inspekterar koordinaterna åt dig, och returnerar den korrekta
  vinkeln. Om punkten ligger ovanför x-axeln blir vinkeln positiv,
  annars blir den negativ. Det ovanstående problemet blir nu löst
  eftersom atan2(-1, -1) = -2,36 rad = -135 grader.
&lt;/p&gt;

&lt;p&gt;
  Med atan2 blir det enkelt att göra exempelvis
  en &lt;a href=&quot;http://spelprogrammering.nu/spela/465585&quot;&gt;orm&lt;/a&gt; och
  en &lt;a href=&quot;http://spelprogrammering.nu/spela/376530&quot;&gt;tentakel&lt;/a&gt;
  som följer muspekaren! Båda är roliga exempel på när matematik kan
  åstadkomma häftiga realistiska effekter!
&lt;/p&gt;</description>
  </item>
  </channel>
</rss>
