Spring til indhold

Arctanxy

Fra Wikipedia, den frie encyklopædi
(Omdirigeret fra Bruger:AstroOgier/arctanxy)
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 .


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.

I 1961 implementerede programmeringssproget Fortran IV [1]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.

  • Fortran.
  • Programmeringssproget C benytter konventionen .
  • I Common Lisp skrives .[2]
  • Microsoft Excel,[3] OpenOffice.org Calc og Google Spreadsheets,[4] 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 .

Ved dette valg af navngivning er der ikke tvivl om argumentrækkefølgen, kaldet er .

Implementation af arctanxy

[redigér | rediger kildetekst]

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
  1. ^ Organick, Elliott I. (1966). A FORTRAN IV Primer. Addison-Wesley. s. 42. Some processors also offer the library function called ATAN2, a function of two arguments (opposite and adjacent).
  2. ^ "CLHS: Function ASIN, ACOS, ATAN". LispWorks.
  3. ^ "Microsoft Excel Atan2 Method". Microsoft. 14. juni 2014.
  4. ^ "Functions and formulas – Docs Editors Help". support.google.com.