vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Variablen/Strings · Algorithmen/Mathematik   |   VB-Versionen: VB5, VB607.03.01
Cartesian2Polar

Quadrantenrichtige Umwandlung von kartesischen Koordinaten in Polar-Koordinaten

Autor:   Helmut SuhrenBewertung:  Views:  20.904 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Unser heutige Tipp stellt ein Algorithmus vor, mit welchem sich kartesische Koordinaten-Angaben in Polar-Koordinaten umwandeln lassen.

Hierzu wird die Funktion atan2 benötigt, welche im Gegensatz zu manch anderen Programmiersprachen nicht Bestandteil von Visual-Basic ist. Der Standard-Funktion "atan" wird bekanntlich nur der Quotient (x/y) übergeben, wobei dann keine Unterscheidung mehr möglich ist, ob z.B. x oder y negativ ist. Dadurch daß in der Funktion atan2 beide Werte (x und y) separat übergeben werden, ist diese Unterscheidung möglich.

' Umwandlung kartesische Koordinaten in Polar-Koordinaten
Public Sub Cartesian2Polar(dx As Double, dy As Double, _
  r As Double, b As Double)
 
  r = Sqr(dx ^ 2 + dy ^ 2)
  b = atan2d(dx, dy)
End Sub
 
' Quadrantenrichtige Arcustangens-Funktion in Degrees
Public Function atan2d(dx As Double, dy As Double, _
  Optional positive_only As Boolean = True) As Double
 
  atan2d = atan2(dx, dy, positive_only) * 45 / Atn(1)
End Function
 
' Quadrantenrichtige Arcustangens-Funktion in rad
Public Function atan2(dx As Double, dy As Double, _
  Optional positive_only As Boolean = True) As Double
 
  Dim PI As Double
  Dim PI_2 As Double
 
  PI = Atn(1) * 4    ' PI
  PI_2 = Atn(1) * 2  ' PI/2
 
  Select Case True
    Case Abs(dx) < 0.0000001
      ' -pi(-180°) / 0(0°)
      atan2 = IIf(dy < 0#, -Pi, 0#)
 
    Case Abs(dy) < 0.0000001
      ' -pi/2(-90°) / +pi/2(+90°)
      atan2 = IIf(dx < 0#, -PI_2, PI_2)
 
    Case Else
      atan2 = Atn(dx / dy)
      atan2 = atan2 + IIf(atan2 < 0#, IIf(dy < 0#, _
        PI, 0#), IIf(dx < 0#, -PI, 0#))
  End Select
 
  If positive_only And (atan2 < 0) Then _
    atan2 = atan2 + 2 * Pi
End Function

Erweiterung vom 19.02.09:

' Umrechnung von Polar- in kartesische Koordinaten
Public Sub Polar2Cartesian(ByVal R As Double, ByVal b As Double, _
  x As Double, y As Double) 
 
  x = Sin(b * Atn(1) / 45) * R 
  y = Cos(b * Atn(1) / 45) * R 
End Sub



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.