|
| 1 | +namespace ktsu.PhysicalQuantity.AngularMomentum; |
| 2 | + |
| 3 | +using System.Numerics; |
| 4 | +using ktsu.PhysicalQuantity.AngularVelocity; |
| 5 | +using ktsu.PhysicalQuantity.Force; |
| 6 | +using ktsu.PhysicalQuantity.Generic; |
| 7 | +using ktsu.PhysicalQuantity.MomentOfInertia; |
| 8 | + |
| 9 | +[SIUnit("kg·m²/s", "kilogram square meter per second", "kilogram square meters per second")] |
| 10 | +public sealed record AngularMomentum |
| 11 | + : PhysicalQuantity<AngularMomentum> |
| 12 | + , IIntegralOperators<AngularMomentum, AngularVelocity, Force> |
| 13 | + , IDerivativeOperators<AngularMomentum, AngularVelocity, MomentOfInertia> |
| 14 | +{ |
| 15 | + public static Force operator *(AngularMomentum left, AngularVelocity right) => |
| 16 | + IIntegralOperators<AngularMomentum, AngularVelocity, Force>.Integrate(left, right); |
| 17 | + |
| 18 | + public static MomentOfInertia operator /(AngularMomentum left, AngularVelocity right) => |
| 19 | + IDerivativeOperators<AngularMomentum, AngularVelocity, MomentOfInertia>.Derive(left, right); |
| 20 | +} |
| 21 | + |
| 22 | +public static class AngularMomentumConversions |
| 23 | +{ |
| 24 | + public static AngularMomentum KilogramSquareMetersPerSecond<TNumber>(this TNumber value) |
| 25 | + where TNumber : INumber<TNumber> |
| 26 | + => value.ConvertToQuantity<TNumber, AngularMomentum>(); |
| 27 | + |
| 28 | + public static TNumber KilogramSquareMetersPerSecond<TNumber>(this AngularMomentum value) |
| 29 | + where TNumber : INumber<TNumber> |
| 30 | + => value.ConvertToNumber().To<TNumber>(); |
| 31 | + |
| 32 | + public static AngularMomentum GramSquareMetersPerSecond<TNumber>(this TNumber value) |
| 33 | + where TNumber : INumber<TNumber> |
| 34 | + => value.ConvertToQuantity<TNumber, AngularMomentum>(Constants.Milli); |
| 35 | + |
| 36 | + public static TNumber GramSquareMetersPerSecond<TNumber>(this AngularMomentum value) |
| 37 | + where TNumber : INumber<TNumber> |
| 38 | + => value.ConvertToNumber(Constants.Milli).To<TNumber>(); |
| 39 | + |
| 40 | + public static AngularMomentum MilligramSquareMetersPerSecond<TNumber>(this TNumber value) |
| 41 | + where TNumber : INumber<TNumber> |
| 42 | + => value.ConvertToQuantity<TNumber, AngularMomentum>(Constants.Micro); |
| 43 | + |
| 44 | + public static TNumber MilligramSquareMetersPerSecond<TNumber>(this AngularMomentum value) |
| 45 | + where TNumber : INumber<TNumber> |
| 46 | + => value.ConvertToNumber(Constants.Micro).To<TNumber>(); |
| 47 | +} |
0 commit comments