AnsichtenMathe: Quaternion
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 |