From 67c1b54b5a6b3c700218bd80397cb19806de46a2 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Thu, 25 May 2023 17:51:40 +0800 Subject: [PATCH] feat: add Cos and Sin function --- mathutil/mathutil.go | 22 ++++++++++++++++++++++ mathutil/mathutil_test.go | 20 ++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/mathutil/mathutil.go b/mathutil/mathutil.go index a8e46c9..b919ee6 100644 --- a/mathutil/mathutil.go +++ b/mathutil/mathutil.go @@ -301,3 +301,25 @@ func lcm[T constraints.Integer](a, b T) T { } return a * b / gcd(a, b) } + +// Cos returns the cosine of the radian argument. +// Play: todo +func Cos(radian float64, precision ...int) float64 { + t := 1.0 / (2.0 * math.Pi) + radian *= t + radian -= 0.25 + math.Floor(radian+0.25) + radian *= 16.0 * (math.Abs(radian) - 0.5) + radian += 0.225 * radian * (math.Abs(radian) - 1.0) + + if len(precision) == 1 { + return TruncRound(radian, precision[0]) + } + + return TruncRound(radian, 3) +} + +// Cos returns the sine of the radian argument. +// Play: todo +func Sin(radian float64, precision ...int) float64 { + return Cos((math.Pi / 2) - radian) +} diff --git a/mathutil/mathutil_test.go b/mathutil/mathutil_test.go index 723c84f..f29d9e4 100644 --- a/mathutil/mathutil_test.go +++ b/mathutil/mathutil_test.go @@ -249,3 +249,23 @@ func TestLCM(t *testing.T) { assert.Equal(2, LCM(1, 2)) assert.Equal(18, LCM(3, 6, 9)) } + +func TestCos(t *testing.T) { + assert := internal.NewAssert(t, "TestCos") + + assert.EqualValues(1, Cos(0)) + assert.EqualValues(-0.447, Cos(90)) + assert.EqualValues(-0.598, Cos(180)) + assert.EqualValues(-1, Cos(math.Pi)) + assert.EqualValues(0, Cos(math.Pi/2)) +} + +func TestSin(t *testing.T) { + assert := internal.NewAssert(t, "TestSin") + + assert.EqualValues(0, Sin(0)) + assert.EqualValues(0.894, Sin(90)) + assert.EqualValues(-0.801, Sin(180)) + assert.EqualValues(0, Sin(math.Pi)) + assert.EqualValues(1, Sin(math.Pi/2)) +}