Programmering är roligt!

Mikael skriver om programmering, systemadministration och mycket annat!

Kolla in min bok: Spelprogrammering med HTML5 och JavaScript

Kategorier 

2013-09-01
Ormar, tentakler och atan2

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å.

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:

...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.

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

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?

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.

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.

Med atan2 blir det enkelt att göra exempelvis en orm och en tentakel som följer muspekaren! Båda är roliga exempel på när matematik kan åstadkomma häftiga realistiska effekter!

Maila din kommentar till mikael@tylmad.com, så lägger jag in den under inlägget.