From d948420ebacf9ba73d37fac2dc0eab0b2af16962 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 25 Dec 2022 16:08:33 +0100 Subject: [PATCH] + (modified) patch by Bart B to add Cycles conversion functions, part of #40055 --- rtl/objpas/math.pp | 179 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 167 insertions(+), 12 deletions(-) diff --git a/rtl/objpas/math.pp b/rtl/objpas/math.pp index ea60688f74..0cd27db489 100644 --- a/rtl/objpas/math.pp +++ b/rtl/objpas/math.pp @@ -318,9 +318,61 @@ function GradToRad(grad : float) : float;inline; function RadToGrad(rad : float) : float;inline; function DegToGrad(deg : float) : float;inline; function GradToDeg(grad : float) : float;inline; -{ one cycle are 2*Pi rad } -function CycleToRad(cycle : float) : float;inline; -function RadToCycle(rad : float) : float;inline; +{$ifdef FPC_HAS_TYPE_SINGLE} +function CycleToDeg(const Cycles: Single): Single; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function CycleToDeg(const Cycles: Double): Double; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function CycleToDeg(const Cycles: Extended): Extended; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_SINGLE} +function DegToCycle(const Degrees: Single): Single; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function DegToCycle(const Degrees: Double): Double; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function DegToCycle(const Degrees: Extended): Extended; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_SINGLE} +function CycleToGrad(const Cycles: Single): Single; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function CycleToGrad(const Cycles: Double): Double; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function CycleToGrad(const Cycles: Extended): Extended; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_SINGLE} +function GradToCycle(const Grads: Single): Single; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function GradToCycle(const Grads: Double): Double; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function GradToCycle(const Grads: Extended): Extended; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_SINGLE} +function CycleToRad(const Cycles: Single): Single; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function CycleToRad(const Cycles: Double): Double; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function CycleToRad(const Cycles: Extended): Extended; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_SINGLE} +function RadToCycle(const Rads: Single): Single; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function RadToCycle(const Rads: Double): Double; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function RadToCycle(const Rads: Extended): Extended; +{$ENDIF} + {$ifdef FPC_HAS_TYPE_SINGLE} Function DegNormalize(deg : single) : single; inline; {$ENDIF} @@ -780,16 +832,119 @@ function gradtodeg(grad : float) : float;inline; gradtodeg:=grad*(180.0/200.0); end; -function cycletorad(cycle : float) : float;inline; - begin - cycletorad:=(2*pi)*cycle; - end; +{$ifdef FPC_HAS_TYPE_SINGLE} +function CycleToDeg(const Cycles: Single): Single; +begin + CycleToDeg:=Cycles*360.0; +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function CycleToDeg(const Cycles: Double): Double; +begin + CycleToDeg:=Cycles*360.0; +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function CycleToDeg(const Cycles: Extended): Extended; +begin + CycleToDeg:=Cycles*360.0; +end; +{$ENDIF} -function radtocycle(rad : float) : float;inline; - begin - { avoid division } - radtocycle:=rad*(1/(2*pi)); - end; +{$ifdef FPC_HAS_TYPE_SINGLE} +function DegToCycle(const Degrees: Single): Single; +begin + DegToCycle:=Degrees*(1/360.0); +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function DegToCycle(const Degrees: Double): Double; +begin + DegToCycle:=Degrees*(1/360.0); +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function DegToCycle(const Degrees: Extended): Extended; +begin + DegToCycle:=Degrees*(1/360.0); +end; +{$ENDIF} + +{$ifdef FPC_HAS_TYPE_SINGLE} +function CycleToGrad(const Cycles: Single): Single; +begin + CycleToGrad:=Cycles*400.0; +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function CycleToGrad(const Cycles: Double): Double; +begin + CycleToGrad:=Cycles*400.0; +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function CycleToGrad(const Cycles: Extended): Extended; +begin + CycleToGrad:=Cycles*400.0; +end; +{$ENDIF} + +{$ifdef FPC_HAS_TYPE_SINGLE} +function GradToCycle(const Grads: Single): Single; +begin + GradToCycle:=Grads*(1/400.0); +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function GradToCycle(const Grads: Double): Double; +begin + GradToCycle:=Grads*(1/400.0); +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function GradToCycle(const Grads: Extended): Extended; +begin + GradToCycle:=Grads*(1/400.0); +end; +{$ENDIF} + +{$ifdef FPC_HAS_TYPE_SINGLE} +function CycleToRad(const Cycles: Single): Single; +begin + CycleToRad:=Cycles*2*pi; +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function CycleToRad(const Cycles: Double): Double; +begin + CycleToRad:=Cycles*2*pi; +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function CycleToRad(const Cycles: Extended): Extended; +begin + CycleToRad:=Cycles*2*pi; +end; +{$ENDIF} + +{$ifdef FPC_HAS_TYPE_SINGLE} +function RadToCycle(const Rads: Single): Single; +begin + RadToCycle:=Rads*(1/(2*pi)); +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_DOUBLE} +function RadToCycle(const Rads: Double): Double; +begin + RadToCycle:=Rads*(1/(2*pi)); +end; +{$ENDIF} +{$ifdef FPC_HAS_TYPE_EXTENDED} +function RadToCycle(const Rads: Extended): Extended; +begin + RadToCycle:=Rads*(1/(2*pi)); +end; +{$ENDIF} {$ifdef FPC_HAS_TYPE_SINGLE} Function DegNormalize(deg : single) : single;