This C# library provides implementations of all standard trigonometric functions, including basic functions like sine, cosine, and tangent, as well as their hyperbolic counterparts, inverse functions, and more. This library is designed to offer a comprehensive set of tools for mathematical, engineering, and scientific applications requiring trigonometric calculations.
The .NET includes basic trigonometric functions (sin, cos, tan, asin, acos, atan) and their hyperbolic counterparts (sinh, cosh, tanh, asinh, acosh, atanh) in the Math class. However, the following trigonometric functions are missing in .NET and are implemented in this library:
You can find a detailed explanation of the implementation and approach in my article on Medium.
You can install this library via NuGet Package Manager. To do this, follow these steps:
Select the package and click Install. Alternatively, you can install the package using the NuGet Package Manager Console:
Install-Package MathTrigonometric
Sin
Sine of the angle is ratio of the opposite leg to hypotenuse.
double Sin(double a);
Cos
Cosine of the angle is ratio of the adjacent leg to hypotenuse.
double Cos(double a);
Tan
Tangent of the angle is ratio of the opposite leg to adjacent one.
double Tan(double a);
Cot
Cotangent of the angle is ratio of the adjacent leg to opposite one.
double Cot(double a);
Sec
Secant of the angle is ratio of the hypotenuse to adjacent leg.
double Sec(double a);
Csc
Cosecant of the angle is ratio of the hypotenuse to opposite leg.
double Csc(double a);
Asin
Arc sine is inverse of the Sine function.
double Asin(double d);
Acos
Arc cosine is inverse of the Cosine function.
double Acos(double d);
Atan
Arc tangent is inverse of the Tangent function.
double Atan(double d);
Acot
Arc cotangent is inverse of the Cotangent function.
double Acot(double d);
Asec
Arc secant is inverse of the Secant function.
double Asec(double d);
Acsc
Arc cosecant is inverse of the Cosecant function.
double Acsc(double d);
Sinh
Hyperbolic sine is defined as Sinh(x) = (e\^x − e\^−x)/2.
double Sinh(double x);
Cosh
Hyperbolic cosine is defined as Cosh(x) = (e\^x + e\^−x)/2.
double Cosh(double x);
Tanh
Hyperbolic tangent is defined as Tanh(x) = (e\^x − e\^−x)/(e\^x + e\^−x).
double Tanh(double x);
Coth
Hyperbolic cotangent is defined as Coth(x) = (e\^x + e\^−x)/(e\^x − e\^−x).
double Coth(double x);
Sech
Hyperbolic secant is defined as Sech(x) = 2/(e\^x + e\^−x).
double Sech(double x);
Csch
Hyperbolic cosecant is defined as Csch(x) = 2/(e\^x − e\^−x).
double Csch(double x);
Asinh
Arc-hyperbolic sine is inverse of the Hyperbolic sine function is defined as Arsinh(x) = ln[x + √(x\^2 + 1)].
double Asinh(double x);
Acosh
Arc-hyperbolic cosine is inverse of the Hyperbolic cosine function is defined as Arcosh(x) = ln[x + √(x\^2 - 1)].
double Acosh(double x);
Atanh
Arc-hyperbolic tangent is inverse of the Hyperbolic tangent function is defined as Artanh(x) = ln[(1 + x)/(1 − x)]/2.
double Atanh(double x);
Acoth
Arc-hyperbolic cotangent is inverse of the Hyperbolic cotangent function is defined as Arcoth(x) = ln[(1 + x)/(x − 1)]/2.
double Acoth(double x);
Asech
Arc-hyperbolic secant is inverse of the Hyperbolic secant function is defined as Arsech(x) = ln([1 + √(1 − x\^2)]/x).
double Asech(double x);
Acsch
Arc-hyperbolic cosecant is inverse of the Hyperbolic cosecant function is defined as Arcsch(x) = ln[1/x + √(1/(x\^2) + 1)].
double Acsch(double x);
DegreesToRadians
Converts degrees to radians.
double DegreesToRadians(double degrees);
RadiansToDegrees
Converts radians to degrees.
double RadiansToDegrees(double radians);
Here are some examples of how to use the trigonometric functions in this library:
using MathTrigonometric;
class Program { static void Main() { double angle = Math.PI / 4; // 45 degrees in radians
double sine = MathTrig.Sin(angle);
double cosine = MathTrig.Cos(angle);
double tangent = MathTrig.Tan(angle);
double cotangent = MathTrig.Cot(angle);
double secant = MathTrig.Sec(angle);
double cosecant = MathTrig.Csc(angle);
Console.WriteLine($"Sin({angle}) = {sine}");
Console.WriteLine($"Cos({angle}) = {cosine}");
Console.WriteLine($"Tan({angle}) = {tangent}");
Console.WriteLine($"Cot({angle}) = {cotangent}");
Console.WriteLine($"Sec({angle}) = {secant}");
Console.WriteLine($"Csc({angle}) = {cosecant}");
}
}
using MathTrigonometric;
class Program { static void Main() { double value = 0.5;
double angleAsin = MathTrig.Asin(value);
double angleAcos = MathTrig.Acos(value);
double angleAtan = MathTrig.Atan(value);
double angleAcot = MathTrig.Acot(value);
double angleAsec = MathTrig.Asec(2); // sec(π/3) = 2
double angleAcsc = MathTrig.Acsc(2); // csc(π/6) = 2
Console.WriteLine($"Asin({value}) = {angleAsin}");
Console.WriteLine($"Acos({value}) = {angleAcos}");
Console.WriteLine($"Atan({value}) = {angleAtan}");
Console.WriteLine($"Acot({value}) = {angleAcot}");
Console.WriteLine($"Asec(2) = {angleAsec}");
Console.WriteLine($"Acsc(2) = {angleAcsc}");
}
}
using MathTrigonometric;
class Program { static void Main() { double value = 1.0;
double sinh = MathTrig.Sinh(value);
double cosh = MathTrig.Cosh(value);
double tanh = MathTrig.Tanh(value);
double coth = MathTrig.Coth(value);
double sech = MathTrig.Sech(value);
double csch = MathTrig.Csch(value);
Console.WriteLine($"Sinh({value}) = {sinh}");
Console.WriteLine($"Cosh({value}) = {cosh}");
Console.WriteLine($"Tanh({value}) = {tanh}");
Console.WriteLine($"Coth({value}) = {coth}");
Console.WriteLine($"Sech({value}) = {sech}");
Console.WriteLine($"Csch({value}) = {csch}");
}
}
using MathTrigonometric;
class Program { static void Main() { double value = 0.5;
double asinh = MathTrig.Asinh(value);
double acosh = MathTrig.Acosh(1.5);
double atanh = MathTrig.Atanh(value);
double acoth = MathTrig.Acoth(2);
double asech = MathTrig.Asech(value);
double acsch = MathTrig.Acsch(2);
Console.WriteLine($"Asinh({value}) = {asinh}");
Console.WriteLine($"Acosh(1.5) = {acosh}");
Console.WriteLine($"Atanh({value}) = {atanh}");
Console.WriteLine($"Acoth(2) = {acoth}");
Console.WriteLine($"Asech({value}) = {asech}");
Console.WriteLine($"Acsch(2) = {acsch}");
}
}
Contributions are welcome! Please fork the repository and submit pull requests for any enhancements or bug fixes. If you enjoy my work and find it valuable, please consider becoming my sponsor on GitHub. Your support will enable me to share more open-source code. Together, we can make a positive impact in the developer community!
This project is licensed under the MIT License - see the LICENSE file for details.
If you have any questions or suggestions, feel free to open an issue or contact me directly.