Coder Social home page Coder Social logo

netfabric / netfabric.angle Goto Github PK

View Code? Open in Web Editor NEW
15.0 3.0 5.0 4.85 MB

An immutable double-precision angle that supports revolutions, radians, degrees, and gradians.

License: MIT License

C# 99.54% HTML 0.46%
csharp csharp-library dotnet nuget-package angle trigonometry radians degrees visual-basic reference-angle

netfabric.angle's Introduction

GitHub last commit (develop) GitHub Workflow Status (branch) NuGet Version NuGet Downloads

NetFabric.Angle

Implements a structure representing an angle.

The angle is stored in memory in the angle measurement unit it was originally defined, with double precision, allowing fine control over conversions and reducing rounding errors. All operations are strongly-typed.

Includes angle operations like lerp, reduction, reference angle, comparison, classification and trigonometry.

Usage:

Adding to your project

NetFabric.Angle is available as a NuGet package and as a Unity package.

Creation of the angle:

Use the methods for the measurement units you are working with:

var right0 = Angle.FromRadian(Math.PI / 2.0);
var right1 = Angle.FromDegrees(90.0);
var right3 = Angle.FromGradian(100.0);

When using DMS format, arcminutes and arcseconds have to be values in the interval [0.0, 60.0[

var right3 = Angle.FromDegrees(90, 59.9); // degrees and arcminutes
var right4 = Angle.FromDegrees(-90, 59, 59.9); // degrees, arcminutes and arcseconds

You can use the predefined angles in any measuring unit:

var zero = AngleDegrees.Zero;          // 0 degrees
var right = AngleDegrees.Right;        // 90 degrees
var straight = AngleDegrees.Straight;  // 180 degrees
var full = AngleDegrees.Full;          // 360 degrees
var zero = AngleRadians.Zero;          // 0 radians
var right = AngleRadians.Right;        // PI/2 radians
var straight = AngleRadians.Straight;  // PI radians
var full = AngleRadians.Full;          // 2 * PI radians

Converting the angle:

Use the static methods to convert any angle:

var radians = Angle.ToRadians(angle);

Angles are strongly typed so it knows what measuring unit is converting from.

Note: If required, the results have to be explicitly reduced.

Reading the angle:

Use the property named after the measuring unit (to be explicit):

var radians = angleRadians.Radians;
var degrees = angleDegrees.Degrees;
var gradians = angleGradians.Gradians;

An angle in degrees can be deconstructed into DMS notation. This can be done using either out arguments:

int degrees0;
double minute0;
angleDegrees.Deconstruct(out degrees0, out minutes0);

int degrees1;
int minute1;
double seconds1;
angleDegrees.Deconstruct(out degrees1, out minutes1, out seconds1);

out arguments with C# 7 syntax:

angleDegrees.Deconstruct(out var degrees0, out var minutes0);
angleDegrees.Deconstruct(out var degrees1, out var minutes1, out var seconds1);

or using C# 7 deconstructors:

var (degrees0, minutes0) = angleDegrees;
var (degrees1, minutes1, seconds1) = angleDegrees;

Reduction and reference

The angle can be reduced to a coterminal angle in the range [0.0, 360.0[ degrees: ​

var angle = Angle.Reduce(AngleDegrees.Right + AngleDegrees.Full); // result is AngleDegrees.Right

Getting the reference angle (the smallest angle with the x-axis):

var angle = Angle.GetReference(AngleDegrees.Right + AngleDegrees.FromDegrees(45.0)); // result is an angle with 45 degrees

Math operations

Math operators are defined allowing calculations with angles. ​

var angle0 = -AngleDegrees.Right;
var angle1 = AngleDegrees.Straight + Angle.FromDegrees(45.0);
var angle2 = 2.0 * Angle.FromDegrees(30.0);
var angle3 = Angle.FromDegrees(30.0) / 2.0;

Note: If required, the results have to be explicitly reduced.

Equivalent methods are also defined so they can be used for languages that do not support operators.

var angle0 = Angle.Negate(AngleDegrees.Right);
var angle1 = Angle.Add(AngleDegrees.Straight, Angle.FromDegrees(45.0));
var angle2 = Angle.Multiply(2.0, Angle.FromDegrees(30.0));
var angle3 = Angle.Divide(Angle.FromDegrees(30.0), 2.0);

Comparison

Comparison operatores can be used to compare two angles: ​

if(angle0 > angle1 || angle0 == angle2) {
    ...
}

For languages that do not support operators use the static Compare() method: ​

if(Angle.Compare(angle0, angle1) <= 0) { // less or equal to
    ...
}

For performance reasons, the values compared are not reduced. If required, they have to be explicitly reduced: ​

if(Angle.Reduce(angle0) > Angle.Reduce(angle1)) {
    ...
}

or use the static CompareReduced() method:

if(Angle.CompareReduced(angle0, angle1) > 0) {
    ...
}

Trigonometry

The usual trigonometry operations (sin, cos, tan, asin, acos, atan, sinh and cosh) are available as static methods but only for angles in radians:

double value0 = Angle.Sin(angleRadians);
AngleRadians angle0 = Angle.Asin(value0);

Angles not in radians have to be converted:

double value1 = Angle.Sin(Angle.ToRadians(angleDegrees));
AngleDegrees angle1 = Angle.ToDegrees(Angle.Asin(value1));

Classification

You can get the quadrante of the angle

var quad0 = Angle.GetQuadrant(Angle.FromDegrees(45.0)); // Angle.Quadrant.First
var quad1 = Angle.GetQuadrant(Angle.FromDegrees(220.0)); // Angle.Quadrant.Third
var quad2 = Angle.GetQuadrant(Angle.FromDegrees(-45.0)); // Angle.Quadrant.Fourth

and can check if an angle is acute, right, obtuse, straight or reflex:

var isAcute = Angle.IsAcute(AngleDegrees.Right); // false
var isAcute = Angle.IsAcute(Angle.FromDegrees(45.0)); // true
var isRight = Angle.IsRight(AngleDegrees.Right); // true

Classification considers the reduced positive equivalent of the angle so:

var isAcute = Angle.IsAcute(Angle.FromDegrees(45.0)); // true
var isAcute = Angle.IsAcute(Angle.FromDegrees(-45.0)); // true
var isAcute = Angle.IsAcute(Angle.FromDegrees(315.0)); // false

netfabric.angle's People

Contributors

aalmada avatar gitter-badger avatar mend-bolt-for-github[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

netfabric.angle's Issues

CVE-2019-0820 (High) detected in system.text.regularexpressions.4.3.0.nupkg

CVE-2019-0820 - High Severity Vulnerability

Vulnerable Library - system.text.regularexpressions.4.3.0.nupkg

Provides the System.Text.RegularExpressions.Regex class, an implementation of a regular expression e...

Library home page: https://api.nuget.org/packages/system.text.regularexpressions.4.3.0.nupkg

Path to dependency file: NetFabric.Angle/NetFabric.Angle.UnitTests/NetFabric.Angle.UnitTests.csproj

Path to vulnerable library: /usr/share/dotnet/sdk/NuGetFallbackFolder/system.text.regularexpressions/4.3.0/system.text.regularexpressions.4.3.0.nupkg

Dependency Hierarchy:

  • xunit.2.4.1.nupkg (Root Library)
    • xunit.assert.2.4.1.nupkg
      • netstandard.library.1.6.1.nupkg
        • system.xml.xdocument.4.3.0.nupkg
          • system.xml.readerwriter.4.3.0.nupkg
            • system.text.regularexpressions.4.3.0.nupkg (Vulnerable Library)

Found in HEAD commit: 060683b644b2251c27f2c2b7be9e3c624bdd6363

Found in base branch: master

Vulnerability Details

A denial of service vulnerability exists when .NET Framework and .NET Core improperly process RegEx strings, aka '.NET Framework and .NET Core Denial of Service Vulnerability'. This CVE ID is unique from CVE-2019-0980, CVE-2019-0981.

Publish Date: 2019-05-16

URL: CVE-2019-0820

CVSS 3 Score Details (7.5)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: None
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: None
    • Integrity Impact: None
    • Availability Impact: High

For more information on CVSS3 Scores, click here.


Step up your Open Source Security Game with WhiteSource here

CVE-2018-8292 (High) detected in system.net.http.4.3.0.nupkg

CVE-2018-8292 - High Severity Vulnerability

Vulnerable Library - system.net.http.4.3.0.nupkg

Provides a programming interface for modern HTTP applications, including HTTP client components that...

Library home page: https://api.nuget.org/packages/system.net.http.4.3.0.nupkg

Path to dependency file: NetFabric.Angle/NetFabric.Angle.UnitTests/NetFabric.Angle.UnitTests.csproj

Path to vulnerable library: /usr/share/dotnet/sdk/NuGetFallbackFolder/system.net.http/4.3.0/system.net.http.4.3.0.nupkg

Dependency Hierarchy:

  • xunit.2.4.1.nupkg (Root Library)
    • xunit.assert.2.4.1.nupkg
      • netstandard.library.1.6.1.nupkg
        • system.net.http.4.3.0.nupkg (Vulnerable Library)

Found in HEAD commit: 060683b644b2251c27f2c2b7be9e3c624bdd6363

Found in base branch: master

Vulnerability Details

An information disclosure vulnerability exists in .NET Core when authentication information is inadvertently exposed in a redirect, aka ".NET Core Information Disclosure Vulnerability." This affects .NET Core 2.1, .NET Core 1.0, .NET Core 1.1, PowerShell Core 6.0.

Publish Date: 2018-10-10

URL: CVE-2018-8292

CVSS 3 Score Details (7.5)

Base Score Metrics:

  • Exploitability Metrics:
    • Attack Vector: Network
    • Attack Complexity: Low
    • Privileges Required: None
    • User Interaction: None
    • Scope: Unchanged
  • Impact Metrics:
    • Confidentiality Impact: High
    • Integrity Impact: None
    • Availability Impact: None

For more information on CVSS3 Scores, click here.

Suggested Fix

Type: Upgrade version

Origin: dotnet/announcements#88

Release Date: 2018-10-10

Fix Resolution: System.Net.Http - 4.3.4;Microsoft.PowerShell.Commands.Utility - 6.1.0-rc.1


Step up your Open Source Security Game with WhiteSource here

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.