Mathe: Quaternion

WRITEME

Quaternionen sind die vierdimensionale Variante für Komplexe-Zahlen.

 
'===============================================================================
'======= Quaternionen Mathematik
 
Public Type Quaternion
    R   As Double       '- Reale Zahl
    I   As Double       '- Imaginäre Zahl
    J   As Double       '-
    K   As Double       '-
End Type
 
 
 
Public Type IntegerXYKW
    X  As Long
    Y  As Long
    K  As Long
    W  As Long
End Type
 
Public Type IntegerXYZW
    X  As Long
    Y  As Long
    Z  As Long
    W  As Long
End Type
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Basis Operationen
 
Function Qnt_Add(ByRef Qnt1 As Quaternion, ByRef Qnt2 As Quaternion) As Quaternion
   Qnt_Add.R = Qnt1.R + Qnt2.R
   Qnt_Add.I = Qnt1.I + Qnt2.I
   Qnt_Add.J = Qnt1.J + Qnt2.J
   Qnt_Add.K = Qnt1.K + Qnt2.K
End Function
 
 
 
Function Qnt_Sub(ByRef Qnt1 As Quaternion, ByRef Qnt2 As Quaternion) As Quaternion
   Qnt_Sub.R = Qnt1.R - Qnt2.R
   Qnt_Sub.I = Qnt1.I - Qnt2.I
   Qnt_Sub.J = Qnt1.J - Qnt2.J
   Qnt_Sub.K = Qnt1.K - Qnt2.K
End Function
 
 
 
Function Qnt_Mul(ByRef Qnt1 As Quaternion, ByRef Qnt2 As Quaternion) As Quaternion
   Qnt_Mul.R = Qnt1.R * Qnt2.R - Qnt1.I * Qnt2.I - Qnt1.J * Qnt2.J - Qnt1.K * Qnt2.K
   Qnt_Mul.I = Qnt1.R * Qnt2.I + Qnt1.I * Qnt2.R + Qnt1.J * Qnt2.K - Qnt1.K * Qnt2.J
   Qnt_Mul.J = Qnt1.R * Qnt2.J - Qnt1.I * Qnt2.K + Qnt1.J * Qnt2.R - Qnt1.K * Qnt2.I
   Qnt_Mul.K = Qnt1.R * Qnt2.K + Qnt1.I * Qnt2.J - Qnt1.J * Qnt2.I - Qnt1.K * Qnt2.R
End Function
 
 
Function Qnt_MulRe(ByRef Qnt1 As Quaternion, ByRef Real2 As Double) As Quaternion
   Qnt_MulRe.R = Qnt1.R * Real2
   Qnt_MulRe.I = Qnt1.I * Real2
   Qnt_MulRe.J = Qnt1.J * Real2
   Qnt_MulRe.K = Qnt1.K * Real2
End Function
 
 
 
Function Qnt_Div(ByRef Qnt1 As Quaternion, ByRef Qnt2 As Quaternion) As Quaternion
    Qnt_Div = Qnt_Mul(Qnt1, Qnt_Inverse(Qnt2))
End Function
 
 
Function Qnt_DivRe(ByRef Qnt1 As Quaternion, ByRef Real2 As Double) As Quaternion
   Qnt_DivRe.R = Qnt1.R / Real2
   Qnt_DivRe.I = Qnt1.I / Real2
   Qnt_DivRe.J = Qnt1.J / Real2
   Qnt_DivRe.K = Qnt1.K / Real2
End Function
 
 
 
Function Qnt_Conjugate(ByRef Qnt1 As Quaternion) As Quaternion
   Qnt_Conjugate.R = Qnt1.R
   Qnt_Conjugate.I = -Qnt1.I
   Qnt_Conjugate.J = -Qnt1.J
   Qnt_Conjugate.K = -Qnt1.K
End Function
 
Function Qnt_Negative(ByRef Qnt1 As Quaternion) As Quaternion
   Qnt_Negative.R = -Qnt1.R
   Qnt_Negative.I = -Qnt1.I
   Qnt_Negative.J = -Qnt1.J
   Qnt_Negative.K = -Qnt1.K
End Function
 
Function Qnt_Inverse(ByRef Qnt1 As Quaternion) As Quaternion
   s# = 1 / Qnt_Abs2(Qnt1)
 
   Qnt_Inverse.R = Qnt1.R * s#
   Qnt_Inverse.I = -Qnt1.I * s#
   Qnt_Inverse.J = -Qnt1.J * s#
   Qnt_Inverse.K = -Qnt1.K * s#
End Function
 
 
 
 
'-------------------------------------------------------------------------------
'------- Basis Operationen Potenz
 
Function Qnt_Sqr(ByRef Qnt1 As Quaternion) As Quaternion
 
 
End Function
 
 
 
Function Qnt_Exp(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
Function Qnt_Pow(ByRef Qnt1 As Quaternion, ByRef Qnt2 As Quaternion) As Quaternion
 
End Function
 
 
 
Function Qnt_Log(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_Log10(ByRef Qnt1 As Quaternion) As Quaternion
    Qnt_Log10 = Qnt_MulRe(Qnt_Log(Qnt1), 1 / Log(10#))
End Function
 
Function Qnt_LogX(ByRef Qnt1 As Quaternion, ByRef Qnt2 As Quaternion) As Quaternion
    Qnt_LogX = Qnt_Div(Qnt_Log(Qnt1), Qnt_Log(Qnt2))
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Basis Eigenschaften
 
Function Qnt_Arg(ByRef Qnt1 As Quaternion) As Double
 
End Function
 
Function Qnt_Abs(ByRef Qnt1 As Quaternion) As Double
    Qnt_Abs = Sqr(Qnt1.R * Qnt1.R + Qnt1.I * Qnt1.I + Qnt1.J * Qnt1.J + Qnt1.K * Qnt1.K)
End Function
 
Function Qnt_Abs2(ByRef Qnt1 As Quaternion) As Double
    Qnt_Abs2 = Qnt1.R * Qnt1.R + Qnt1.I * Qnt1.I + Qnt1.J * Qnt1.J + Qnt1.K * Qnt1.K
End Function
 
Function Qnt_LogAbs(ByRef Qnt1 As Quaternion) As Double
 
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Geometrie
 
Function Qnt_Hypot(ByVal Val1 As Double, ByRef Val2 As Double) As Double
 
End Function
 
Function Qnt_HypotP2(ByVal Val1 As Double, ByRef Val2 As Double) As Double
 
End Function
 
Function Qnt_HypotQnt(ByRef Qnt1 As Quaternion) As Double
 
End Function
 
Function Qnt_HypotQntP2(ByRef Qnt1 As Quaternion) As Double
 
End Function
 
Function Qnt_Set(ByVal ValRe As Double, ByVal ValIm As Double) As Quaternion
 
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Funktionen
 
Function Log1P(ByRef Val1 As Double) As Double
 
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Konversion
 
Function Qnt_Rect(ByVal ValRe As Double, ByVal ValIm As Double) As Quaternion
 
End Function
 
Function Qnt_Polar(ByVal Radius As Double, ByVal Theta As Double) As Quaternion
 
End Function
 
Sub Qnt_PolarTo(ByRef RadiusRet As Double, ByRef ThetaRet As Double, ByRef Qnt1 As Quaternion)
 
End Sub
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Trigonometrie
 
Function Qnt_Sin(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_Cos(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_Tan(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
Function Qnt_Sec(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_Csc(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_Cot(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Trigonometrie Arcus
 
Function Qnt_ArcSin(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_ArcSinRe(ByVal ValRe As Double) As Quaternion
 
End Function
 
 
Function Qnt_ArcCos(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_ArcCosRe(ByVal ValRe As Double) As Quaternion
 
End Function
 
 
Function Qnt_ArcTan(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
Function Qnt_ArcSec(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_ArcSecRe(ByVal ValRe As Double) As Quaternion
 
End Function
 
 
Function Qnt_ArcCsc(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_ArcCscRe(ByVal ValRe As Double) As Quaternion
 
End Function
 
 
Function Qnt_ArcCot(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Trigonometrie Hyperbolicus
 
Function Qnt_HypSin(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypCos(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypTan(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
Function Qnt_HypSec(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypCsc(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypCot(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- Trigonometrie Arcus Hyperbolicus
 
Function Qnt_HypArcSin(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypArcCos(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypArcCosRe(ByVal ValRe As Double) As Quaternion
 
End Function
 
Function Qnt_HypArcTan(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypArcTanRe(ByVal ValRe As Double) As Quaternion
 
End Function
 
Function Qnt_HypArcSec(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypArcCsc(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
Function Qnt_HypArcCot(ByRef Qnt1 As Quaternion) As Quaternion
 
End Function
 
 
 
 
 
'-------------------------------------------------------------------------------
'------- TestRoutine
 
Sub QntTest()
 
   '-
    Dim Qnt1 As Quaternion
    Dim Qnt2 As Quaternion
 
    Dim ValRe  As Double
    Dim ValIm  As Double
    Dim ValK   As Double
    Dim ValW   As Double
    Dim Radius As Double
    Dim Theta  As Double
 
 
    Dim TestQnt As Quaternion
    Dim TestVal As Double
 
 
    '-
    TestQnt = Qnt_Add(Qnt1, Qnt2)
'    TestQnt = Qnt_AddRe(Qnt1, ValRe)
'    TestQnt = Qnt_AddIm(Qnt1, ValIm)
    TestQnt = Qnt_Sub(Qnt1, Qnt2)
'    TestQnt = Qnt_SubRe(Qnt1, ValRe)
'    TestQnt = Qnt_SubIm(Qnt1, ValIm)
    TestQnt = Qnt_Mul(Qnt1, Qnt2)
    TestQnt = Qnt_MulRe(Qnt1, ValRe)
'    TestQnt = Qnt_MulIm(Qnt1, ValIm)
    TestQnt = Qnt_Div(Qnt1, Qnt2)
    TestQnt = Qnt_DivRe(Qnt1, ValRe)
'    TestQnt = Qnt_DivIm(Qnt1, ValIm)
 
    TestVal = Qnt_Arg(Qnt1)
    TestVal = Qnt_Abs(Qnt1)
    TestVal = Qnt_Abs2(Qnt1)
    TestVal = Qnt_LogAbs(Qnt1)
 
    TestQnt = Qnt_Rect(ValRe, ValIm)
    TestQnt = Qnt_Polar(Radius, Theta)
 
    TestQnt = Qnt_Conjugate(Qnt1)
    TestQnt = Qnt_Negative(Qnt1)
    TestQnt = Qnt_Inverse(Qnt1)
 
    TestQnt = Qnt_Sqr(Qnt1)
'    TestQnt = Qnt_SqrRe(ValRe)
    TestQnt = Qnt_Exp(Qnt1)
    TestQnt = Qnt_Pow(Qnt1, Qnt2)
'    TestQnt = Qnt_PowRe(Qnt1, ValRe)
    TestQnt = Qnt_Log(Qnt1)
    TestQnt = Qnt_Log10(Qnt1)
    TestQnt = Qnt_LogX(Qnt1, Qnt2)
 
    TestQnt = Qnt_Sin(Qnt1)
    TestQnt = Qnt_Cos(Qnt1)
    TestQnt = Qnt_Tan(Qnt1)
    TestQnt = Qnt_Sec(Qnt1)
    TestQnt = Qnt_Csc(Qnt1)
    TestQnt = Qnt_Cot(Qnt1)
 
    TestQnt = Qnt_ArcSin(Qnt1)
    TestQnt = Qnt_ArcSinRe(ValRe)
    TestQnt = Qnt_ArcCos(Qnt1)
    TestQnt = Qnt_ArcCosRe(ValRe)
    TestQnt = Qnt_ArcTan(Qnt1)
    TestQnt = Qnt_ArcSec(Qnt1)
    TestQnt = Qnt_ArcSecRe(ValRe)
    TestQnt = Qnt_ArcCsc(Qnt1)
    TestQnt = Qnt_ArcCscRe(ValRe)
    TestQnt = Qnt_ArcCot(Qnt1)
 
    TestQnt = Qnt_HypSin(Qnt1)
    TestQnt = Qnt_HypCos(Qnt1)
    TestQnt = Qnt_HypTan(Qnt1)
    TestQnt = Qnt_HypSec(Qnt1)
    TestQnt = Qnt_HypCsc(Qnt1)
    TestQnt = Qnt_HypCot(Qnt1)
 
    TestQnt = Qnt_HypArcSin(Qnt1)
    TestQnt = Qnt_HypArcCos(Qnt1)
    TestQnt = Qnt_HypArcCosRe(ValRe)
    TestQnt = Qnt_HypArcTan(Qnt1)
    TestQnt = Qnt_HypArcTanRe(ValRe)
    TestQnt = Qnt_HypArcSec(Qnt1)
    TestQnt = Qnt_HypArcCsc(Qnt1)
    TestQnt = Qnt_HypArcCot(Qnt1)
 
End Sub

Runtime/Mathe-Quaternion.txt · Zuletzt geändert: 2009/02/15 14:44 (Externe Bearbeitung)