thumb|Et punkt i planet, som ikke ligger i origo, har de rektangulære koordinater og punktets retningsvinkel er . Funktioner med navne som arctanxy eller arctan2 benyttes i matematik til bestemmelse af retningsvinklen (theta) hørende til et givet punkt i planen med kartesiske (rektangulære) koordinater . Dog tildeles origo, altså punktet med koordinaterne , ikke nogen retningsvinkel. Figuren illustrerer sammenhængen mellem og .
Problematik Kender man et punkts afstand fra origo og dets retningsvinkel (altså punktets polære koordinater , kan man let beregnet punktets kartesiske koordinater :
Til beregning den omvendte vej fra til er den matematiske funktion utilstrækkelig, da den ikke kan skelne mellem to mulige retningsvinkler, eller . For at løse dette problen er det nødvendigt at benytte en funktion med to argumenter, nemlig koordinaterne og . Men de præsenterede løsninger er uenige om rækkefølgen.
arctan2
I 1961 implementerede programmeringssproget Fortran IV en funktion med to argumenter, , med parameterrækkefølgen , således at for positive . hvor er Fortrans betegnelse for . Parameterrækkefølgen er her valgt at følge brøkskrivemåden , men er den modsatte af standardkoordinatrækkefølgen . Nedenstående given en oversigt over, hvilken software, der anvender hvilken konvention.
arctan2(y,x) Fortran. Programmeringssproget C benytter konventionen . I Common Lisp skrives .
arctan2(x,y) Microsoft Excel, OpenOffice.org Calc og Google Spreadsheets, benytter -konventionen. I dansk Excel er celleformlen =arctan2(x_koordinat,y_koordinat). I Mathematica anvendes formen . Mathematica klassificerer som et ubestemt udtryk. I de fleste grafiske lommeregnere fra Texas Instruments er det tilsvarende kald R►Pθ og argumentrækkefølgen er .
arctanxy Ved dette valg af navngivning er der ikke tvivl om argumentrækkefølgen, kaldet er .
Implementation af arctanxy
Programmeringssprog, som indeholder en -funktion kan let konstruere . Herunder vises en implementation af i programmeringssproget Visual Basic, hvor retningsvinklen leveres i radianer i intervallet :
Public Pi As Double Public PiQuart As Double Public PiHalf As Double Public Pi3half As Double Public PiTwice As Double Public mcDegToRad As Double
Sub InitMath() PiQuart = Atn(1) Pi = 4 * PiQuart PiHalf = 2 * PiQuart Pi3half = 6 * PiQquart PiTwice = 8 * PiQuart mcRadToDeg = 45 / PiQuart ' 1 rad = 180/Pi degrees End Sub
Public Function RadToDeg(x As Double) As Double RadToDeg = mcRadToDeg * x End Function
Function AtnDeg(x As Double) As Double AtnDeg = RadToDeg(Atn(x)) End Function
Public Function ArctanXY_0_2pi(x As Double, y As Double) As Double Dim xAbs As Double, yAbs As Double, Phi As Double xAbs = Abs(x): yAbs = Abs(y) Select Case True Case x >= yAbs ' Octants 1 and 8 Phi = Atn(y / x) If y < 0 Then Phi = PiTwice + Phi ' Octant 8 Case y >= xAbs ' Octants 2 and 3 Phi = PiHalf - Atn(x / y) Case -x >= yAbs ' Octants 4 and 5 Phi = Pi + Atn(y / x) Case -y >= xAbs ' Octants 6 and 7 Phi = Pi3half - Atn(x / y) End Select ArctanXY_0_2pi = Phi End Function
Ønskes retningsvinklen i grader, kan følgende konstruktion benyttes. På grund af afrundingsfejl i beregningerne må denne version anbefales i stedet for at benytte ovenstående og derefter konvertere vinklen fra radianer til grader. Retningsvinklen leveres i grader i intervallet :
Public Function ArctanXY_0_360(x As Double, y As Double) As Double Dim xAbs As Double, yAbs As Double, Phi As Double xAbs = Abs(x): yAbs = Abs(y) Select Case True Case x >= yAbs ' Octants 1 and 8 Phi = AtnDeg(y / x) If y < 0 Then Phi = 360 + Phi ' Octant 8 Case y >= xAbs ' Octants 2 and 3 Phi = 90 - AtnDeg(x / y) Case -x >= yAbs ' Octants 4 and 5 Phi = 180 + AtnDeg(y / x) Case -y >= xAbs ' Octants 6 and 7 Phi = 270 - AtnDeg(x / y) End Select ArctanXY_0_360 = Phi End Function Referencer
Kategori:Matematik