From 07cb6a23696745ec258d27ebe287c61159b87b7e Mon Sep 17 00:00:00 2001 From: That-One-Nerd Date: Mon, 31 Oct 2022 11:39:51 -0400 Subject: [PATCH 1/2] Released alpha v2.3.1.52 --- .gitignore | 14 +- Changelog.md | 216 ++++++------------ Nerd_STF/.editorconfig | 4 + Nerd_STF/Extensions/Container2DExtension.cs | 6 +- Nerd_STF/Extensions/ConversionExtension.cs | 4 + Nerd_STF/Extensions/EquationExtension.cs | 13 +- Nerd_STF/Graphics/CMYKA.cs | 12 +- Nerd_STF/Graphics/CMYKAByte.cs | 26 +-- Nerd_STF/Graphics/HSVA.cs | 12 +- Nerd_STF/Graphics/HSVAByte.cs | 22 +- Nerd_STF/Graphics/IColor.cs | 2 +- Nerd_STF/Graphics/IColorByte.cs | 11 +- Nerd_STF/Graphics/IColorFloat.cs | 3 + Nerd_STF/Graphics/Image.cs | 26 +-- Nerd_STF/Graphics/Material.cs | 18 +- Nerd_STF/Graphics/RGBA.cs | 10 +- Nerd_STF/Graphics/RGBAByte.cs | 20 +- Nerd_STF/Mathematics/Algebra/Vector2d.cs | 2 +- Nerd_STF/Mathematics/Algebra/Vector3d.cs | 15 +- Nerd_STF/Mathematics/Angle.cs | 2 + Nerd_STF/Mathematics/Float2.cs | 1 + Nerd_STF/Mathematics/Float3.cs | 6 +- .../Mathematics/Geometry/ITriangulatable.cs | 6 + Nerd_STF/Mathematics/NumberSystems/Complex.cs | 1 + .../Mathematics/NumberSystems/Quaternion.cs | 97 ++++---- Nerd_STF/Nerd_STF.csproj | 46 ++++ Nerd_STF/Nerd_STF.sln | 36 +++ Nerd_STF/ScaleType.cs | 8 + Nerd_STF/bin/Release/net6.0/ref/Nerd_STF.dll | Bin 112640 -> 113152 bytes 29 files changed, 334 insertions(+), 305 deletions(-) create mode 100644 Nerd_STF/.editorconfig create mode 100644 Nerd_STF/Graphics/IColorFloat.cs create mode 100644 Nerd_STF/Nerd_STF.csproj create mode 100644 Nerd_STF/Nerd_STF.sln create mode 100644 Nerd_STF/ScaleType.cs diff --git a/.gitignore b/.gitignore index b47618a..56f823e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,11 @@ -# Visual Studio stuff -*.csproj -*.editorconfig -*.sln +# Useless Visual Studio stuff /Nerd_STF/.vs/ + +# Build Stuff /Nerd_STF/obj -/Nerd_STF/bin/Debug -/Nerd_STF/bin/Release/net6.0/Nerd_STF.deps.json -/Nerd_STF/bin/Release/net6.0/Nerd_STF.dll -/Nerd_STF/bin/Release/net6.0/Nerd_STF.pdb +/Nerd_STF/bin +*.dll +*.pdb # Testing project /Testing diff --git a/Changelog.md b/Changelog.md index 59234c9..f0ca60f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,4 +1,4 @@ -# Nerd_STF v2.3.1.39 +# Nerd_STF v2.3.1.52 ***Read this to know what works and what doesn't!*** @@ -25,11 +25,23 @@ The following types have been checked for the most part and can be safe to use: - `Nerd_STF.Exceptions.InvalidSizeException` - `Nerd_STF.Exceptions.Nerd_STFException` - `Nerd_STF.Exceptions.NoInverseException` +- `Nerd_STF.Extensions.Container2DExtension` +- `Nerd_STF.Extensions.ConversionExtension` +- `Nerd_STF.Extensions.EquationExtension` - `Nerd_STF.Extensions.ToFillExtension` +- `Nerd_STF.Graphics.CMYKA` +- `Nerd_STF.Graphics.CMYKAByte` - `Nerd_STF.Graphics.ColorChannel` +- `Nerd_STF.Graphics.HSVA` +- `Nerd_STF.Graphics.HSVAByte` +- `Nerd_STF.Graphics.IColor` +- `Nerd_STF.Graphics.IColorByte` - `Nerd_STF.Graphics.IlluminationFlags` - `Nerd_STF.Graphics.IlluminationModel` +- `Nerd_STF.Graphics.Image` - `Nerd_STF.Graphics.Material` +- `Nerd_STF.Graphics.RGBA` +- `Nerd_STF.Graphics.RGBAByte` - `Nerd_STF.Graphics.TextureConfig` - `Nerd_STF.Mathematics.Angle` - `Nerd_STF.Mathematics.Calculus` @@ -41,32 +53,13 @@ The following types have been checked for the most part and can be safe to use: - `Nerd_STF.Mathematics.Int3` - `Nerd_STF.Mathematics.Int4` - `Nerd_STF.Mathematics.Mathf` +- `Nerd_STF.Mathematics.Geometry.ISubdividable` - `Nerd_STF.Mathematics.NumberSystems.Complex` - `Nerd_STF.Mathematics.NumberSystems.Quaternion` - - With the exception of the following methods: - - `Quaternion.FromAngles(Angle, Angle, Angle?)` - - `Quaternion.FromAngles(Float3, Angle.Type)` - - `Quaternion.FromVector(Vector3d)` - - `GetAngle()` - - `GetAxis()` - - `ToAngles()` - - `ToVector()` - `Nerd_STF.Mathematics.Samples.Constants` - `Nerd_STF.Mathematics.Samples.Equations` The following types haven't been checked yet, and should still be taken with a grain of salt: -- `Nerd_STF.Extensions.Container2DExtension` -- `Nerd_STF.Extensions.ConversionExtension` -- `Nerd_STF.Extensions.EquationExtension` -- `Nerd_STF.Graphics.CMYKA` -- `Nerd_STF.Graphics.CMYKAByte` -- `Nerd_STF.Graphics.HSVA` -- `Nerd_STF.Graphics.HSVAByte` -- `Nerd_STF.Graphics.IColor` -- `Nerd_STF.Graphics.IColorByte` -- `Nerd_STF.Graphics.Image` -- `Nerd_STF.Graphics.RGBA` -- `Nerd_STF.Graphics.RGBAByte` - `Nerd_STF.Mathematics.Algebra.IMatrix` - `Nerd_STF.Mathematics.Algebra.Matrix` - `Nerd_STF.Mathematics.Algebra.Matrix2x2` @@ -76,7 +69,6 @@ The following types haven't been checked yet, and should still be taken with a g - `Nerd_STF.Mathematics.Algebra.Vector3d` - `Nerd_STF.Mathematics.Geometry.Box2D` - `Nerd_STF.Mathematics.Geometry.Box3D` -- `Nerd_STF.Mathematics.Geometry.ISubdividable` - `Nerd_STF.Mathematics.Geometry.ITriangulatable` - `Nerd_STF.Mathematics.Geometry.Line` - `Nerd_STF.Mathematics.Geometry.Polygon` @@ -85,134 +77,74 @@ The following types haven't been checked yet, and should still be taken with a g - `Nerd_STF.Mathematics.Geometry.Triangle` - `Nerd_STF.Mathematics.Geometry.Vert` -I've checked a total of 39 types, with 29 left to go. It sounds like I'm over halfway, but really I've saved all of the annoying ones that are likely wrong to be checked next. My 39 done includes a bunch of really simple types that never needed checking in the first place too. But there are some done, like any type in the Mathematics directory. +16 left to go. + +Honestly, most of the time taken for this update was spent on Quaternions. Turns out my multiply function was subtley wrong. Who knew! +Just a relief to be done with it. The other stuff wasn't too much of a problem. Matrixes are probably going to be a huge pain if they don't work first try, though. That'll be in the next update, probably. + +I should also note that I just realized after way to long that the `.csproj` file isn't included in the Github. It's included in this new release, and sometime in the future I'll go back and add a correctly working `.csproj` file to all the other releases as well (with the exception of the legacy Nerd_STF 2021 versions likely. We'll see). I'll now not include the `/bin` build files. They'll be in the release and you can build it yourself if you need to now. Anyway, have fun. ``` * Nerd_STF - * Exceptions - + MathException - + UndefinedException * Extensions - + EquationExtension + * Container2DExtension + = Fixed `Flatten(T[,], Int2)` + = `GetColumn(T[,], int, int)` and `GetRow(T[,], int, int)` have been fixed (They had swapped roles) + * ConversionExtension + + ToFill(T[]) + + ToFill(T[,], Int2) + + ToFill2D(T[,]) + * EquationExtension + = Fixed `Scale(Equation, float, ScaleType)` by swapping all instances of `x` and `value` (oops) + = Moved `ScaleType` out of parent class `EquationExtension` and into namespace `Nerd_STF` + * Geometry + * ITriangulatable + + TriangulateAll(T[]) where T : ITriangulatable + * Graphics + + Renamed `IColor` to `IColorFloat` + = Made IColor an object both `IColorFloat` and `IColorByte` inherit from. + * CMYKA + = Made `ToRGBA()` include the alpha value of the color. + * CMYKAByte + = In `ToHSVA()` and `ToHSVAByte()`, swapped some conversions from `RGBA` to `CMYKA` + * HSVA + = Made `ToRGBA()` include the alpha value of the color. + * Image + - Removed some useless constructors + = Fixed some broken constructors * Mathematics - * NumberSystems - * Complex - + Inverse - + GetAngle() - = Fixed `ToString()` and all overloads from adding a redundant negative sign sometimes in the imaginary component. - = Replaced the `/` operator with a multiplication by its inverse. - * Quaternion - + Inverse - = Fixed `ToString()` and all overloads from adding a redundant negative sign sometimes in the i, j, and k components. - = Replaced the `/` operator with a multiplication by its inverse. * Algebra * Vector2d - - static Product(params Vector2d[]) - - static Divide(Vector2d, params Vector2d[]) - - operator *(Vector2d, Angle) - - operator *(Vector2d, Vector2d) - - operator /(Vector2d, Angle) - - operator /(Vector2d, Vector2d) - = Made `ToXYZ()` actually work - * Vector3d - - static Product(params Vector3d[]) - - static Divide(Vector3d, params Vector3d[]) - - operator *(Vector3d, Angle) - - operator *(Vector3d, Vector3d) - - operator /(Vector3d, Angle) - - operator /(Vector3d, Vector3d) - * Calculus - + GetDynamicIntegral(Equation, Equation, Equation, float) - = Made `GetDerivative(Equation, float)` calculate specific values on the fly, and removed the min/max. - * Graphics - * HSVA - - static LerpSquared(HSVA, HSVA, float, Angle.Type, bool = true) - - operator *(HSVA, HSVA) - - operator /(HSVA, HSVA) - * HSVAByte - - static LerpSquared(HSVAByte, HSVAByte, float, Angle.Type, bool = true) + = Removed a default parameter value in `ToString(Angle.Type)` to prevent confusion. + * Vector3d + + string ToString() + + string ToString(Angle.Type) + + string ToString(IFormatProvider, Angle.Type) + = Fixed `ToXYZ()` + * NumberSystems + * Complex + + operator ~(Complex) + * Quaternion + + Rotate(Float3) + + Rotate(Vector3d) + + operator ~(Quaternion) + - ToVector() + = Gave `IJK` proper get and set accessors. + = Renamed some terms in `ToString()` + = Fixed the `Quaternion.FromAngles(*)` methods to do the proper thing. + = Fixed `Quaternion.Rotate(Quaternion)` + = Fixed `Quaternion.Rotate(Float3)` + = Fixed `operator *(Quaternion, Quaternion)` + = Optimized `GetAxis()` + = Simplified `ToXYZ()` + = Swapped the order of `Rotate(Quaternion)` + = Made `GetAxis()` not accidentally create an infinite vector. * Angle - + Reflected - + static Max(bool, params Angle[]) - + static Min(bool, params Angle[]) - - operator *(Angle, Angle) - - operator /(Angle, Angle) - = Made `Angle(float, Type)` use a lambda expression - = Made `Bounded` use the `AbsoluteMod()` function instead of the default `%` expression - = Replaced an accidental `Mathf.Floor()` call with a `Mathf.Round()` call in `Floor()` - = Made `operator -(Angle)` actually give you the reverse angle (not the reflected angle) + + Complimentary + + Supplementary * Float2 - = Made `Median(params Float2)` not use an unneccesary average - = Made `ToVector()` not create an angle out of `ArcTan(float)`, as it already is one - = Optimized `Divide(Float2, params Float2[])` to divide a product instead of individually dividing - = Optimized `Subtract(Float2, params Float2[])` to subtract a sum instead of individually subtracting + + operator *(Float2, Quaternion) * Float3 - = Made `Median(params Float3)` not use an unneccesary average - = Made `ToVector()` not create an angle out of the arc trig functions, as they already are angles - = Optimized `Divide(Float3, params Float3[])` to divide a product instead of individually dividing - = Optimized `Subtract(Float3, params Float3[])` to subtract a sum instead of individually subtracting - * Float4 - = Marked `Far` and `Near` as obsolete/deprecated, as they have been replaced by `HighW` and `LowW` - = Made `Median(params Float4)` not use an unneccesary average - = Optimized `Divide(Float4, params Float4[])` to divide a product instead of individually dividing - = Optimized `Subtract(Float4, params Float4[])` to subtract a sum instead of individually subtracting - * Int2 - = Made `Median(params Float4)` not use an unneccesary average - = Optimized `Divide(Float4, params Float4[])` to divide a product instead of individually dividing - = Optimized `Subtract(Float4, params Float4[])` to subtract a sum instead of individually subtracting - * Int3 - = Made `Median(params Float4)` not use an unneccesary average - = Optimized `Divide(Float4, params Float4[])` to divide a product instead of individually dividing - = Optimized `Subtract(Float4, params Float4[])` to subtract a sum instead of individually subtracting - * Int4 - + LowW - = Marked `Far` as obsolete/deprecated, as it has been replaced by `HighW` - = Made `Median(params Float4)` not use an unneccesary average - = Optimized `Divide(Float4, params Float4[])` to divide a product instead of individually dividing - = Optimized `Subtract(Float4, params Float4[])` to subtract a sum instead of individually subtracting - * Mathf - + AbsoluteMod(float) - + Binomial(int, int, float) - + Factors(int) - + PowerMod(int, int, int) - = Fixed `Ceiling(float)` from rounding up when it shouldn't - = Made `Median(params float[])` actually calculate the right midpoint - = Removed two unneeded `Average(float, float)` calls in `Median(params float[])` - = Replaced the `Floor(float)` and `Ceiling(float)` calls in `Median(params float[])` with a better alternative - = Replaced the mod in `Sin(float)` with an `AbsoluteMod(float, float)` call - = Made `MadeEquation(Dictionary)` actually work. - = Added caching to Power(float, int) for the absolute max - = Fixed an if statement and added another one to prevent extra computation in `Power(float, int)` - = Added caching to Power(int, int) for the absolute max - = Fixed an if statement and added another one to prevent extra computation in `Power(int, int)` - = Made the `Lerp(int, int, float, bool)` function not call itself infinitely many times. - = Replaced a multiplication with a division in `Root(float, float)` - = Made the `Average(int[])` function give you the int average instead of the float average (unlike `Average(float[])`) - = Replaced the float return statement with an Angle in `ArcCos(float)` - = Replaced the float return statement with an Angle in `ArcCot(float)` - = Replaced the float return statement with an Angle in `ArcCsc(float)` - = Replaced the float return statement with an Angle in `ArcSec(float)` - = Replaced the float return statement with an Angle in `ArcSin(float)` - = Replaced the float return statement with an Angle in `ArcTan(float)` - = Replaced the float return statement with an Angle in `ArcTan2(float, float)` - = Optimized `ArcCos(float)` to use presets - = Optimized `Divide(float, params float[])` to use other functions. - = Optimized `Divide(int, params int[])` to use other functions. - = Optimized `Subtract(float, params float[])` to subtract a sum instead of individually subtracting - = Optimized `Subtract(int, params int[])` to subtract a sum instead of individually subtracting - = Made `Clamp(int, int, int)` not remake code and use `Clamp(float, float, float)` - = Made `Lerp(int, int, float, bool)` cast to an int instead of flooring - = Made `Lerp(float, float, float, bool)` not break when clamping and A is greater than B - = Made `Median(params T[])` not use an unneccesary average - = Made `Power(int, int)` not care about absolutes - = Made `Variance(params float[])` correctly calculate variance. - * Quaternion - = Made `GetAngle()` not create an angle out of `ArcCos(float)`, as it already is one - = Made `ToAngles()` not create angles out of arc trig functions, as they are already angles - * Samples - * Constants - = Swapped `DegToRad` and `RadToDeg` - * Equations - = Moved `static Scale(Equation, float, ScaleType)` to `EquationExtension` - = Moved `ScaleType` to `EquationExtension` + + operator *(Float3, Quaternion) + = Fixed `ToVector()` ``` diff --git a/Nerd_STF/.editorconfig b/Nerd_STF/.editorconfig new file mode 100644 index 0000000..1c2dc1c --- /dev/null +++ b/Nerd_STF/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# CA1050: Declare types in namespaces +dotnet_diagnostic.CA1050.severity = warning diff --git a/Nerd_STF/Extensions/Container2DExtension.cs b/Nerd_STF/Extensions/Container2DExtension.cs index 6a90731..a2cbc7a 100644 --- a/Nerd_STF/Extensions/Container2DExtension.cs +++ b/Nerd_STF/Extensions/Container2DExtension.cs @@ -5,20 +5,20 @@ public static class Container2DExtension public static T[] Flatten(this T[,] array, Int2 size) { T[] res = new T[size.x * size.y]; - for (int x = 0; x < size.x; x++) for (int y = 0; y < size.y; y++) res[x + y * size.y] = array[x, y]; + for (int x = 0; x < size.x; x++) for (int y = 0; y < size.y; y++) res[x + y * size.x] = array[y, x]; return res; } public static T[] GetColumn(this T[,] array, int column, int length) { T[] res = new T[length]; - for (int i = 0; i < length; i++) res[i] = array[column, i]; + for (int i = 0; i < length; i++) res[i] = array[i, column]; return res; } public static T[] GetRow(this T[,] array, int row, int length) { T[] res = new T[length]; - for (int i = 0; i < length; i++) res[i] = array[i, row]; + for (int i = 0; i < length; i++) res[i] = array[row, i]; return res; } } diff --git a/Nerd_STF/Extensions/ConversionExtension.cs b/Nerd_STF/Extensions/ConversionExtension.cs index 83c9c3c..3aa2ae0 100644 --- a/Nerd_STF/Extensions/ConversionExtension.cs +++ b/Nerd_STF/Extensions/ConversionExtension.cs @@ -10,4 +10,8 @@ public static class ConversionExtension foreach (KeyValuePair pair in pairs) res.Add(pair.Key, pair.Value); return res; } + + public static Fill ToFill(this T[] arr) => i => arr[i]; + public static Fill ToFill(this T[,] arr, Int2 size) => arr.Flatten(size).ToFill(); + public static Fill2D ToFill2D(this T[,] arr) => (x, y) => arr[x, y]; } diff --git a/Nerd_STF/Extensions/EquationExtension.cs b/Nerd_STF/Extensions/EquationExtension.cs index f39faf6..b3b82d8 100644 --- a/Nerd_STF/Extensions/EquationExtension.cs +++ b/Nerd_STF/Extensions/EquationExtension.cs @@ -4,16 +4,9 @@ public static class EquationExtension { public static Equation Scale(this Equation equ, float value, ScaleType type = ScaleType.Both) => type switch { - ScaleType.X => x => equ(value / x), - ScaleType.Y => x => x * equ(value), - ScaleType.Both => x => x * equ(value / x), + ScaleType.X => x => equ(x / value), + ScaleType.Y => x => value * equ(x), + ScaleType.Both => x => value * equ(x / value), _ => throw new ArgumentException("Unknown scale type " + type) }; - - public enum ScaleType - { - X = 1, - Y = 2, - Both = X | Y - } } diff --git a/Nerd_STF/Graphics/CMYKA.cs b/Nerd_STF/Graphics/CMYKA.cs index 65809f0..7b4a3f8 100644 --- a/Nerd_STF/Graphics/CMYKA.cs +++ b/Nerd_STF/Graphics/CMYKA.cs @@ -1,6 +1,6 @@ namespace Nerd_STF.Graphics; -public struct CMYKA : IColor, IEquatable +public struct CMYKA : IColorFloat, IEquatable { public static CMYKA Black => new(0, 0, 0, 1); public static CMYKA Blue => new(1, 1, 0, 0); @@ -165,7 +165,7 @@ public struct CMYKA : IColor, IEquatable return (Cs, Ms, Ys, Ks, As); } - public bool Equals(IColor? col) => col != null && Equals(col.ToCMYKA()); + public bool Equals(IColorFloat? col) => col != null && Equals(col.ToCMYKA()); public bool Equals(IColorByte? col) => col != null && Equals(col.ToCMYKA()); public bool Equals(CMYKA col) => A == 0 && col.A == 0 || K == 1 && col.K == 1 || C == col.C && M == col.M && Y == col.Y && K == col.K && A == col.A; @@ -174,9 +174,9 @@ public struct CMYKA : IColor, IEquatable if (obj == null) return base.Equals(obj); Type t = obj.GetType(); if (t == typeof(CMYKA)) return Equals((CMYKA)obj); - else if (t == typeof(RGBA)) return Equals((IColor)obj); - else if (t == typeof(HSVA)) return Equals((IColor)obj); - else if (t == typeof(IColor)) return Equals((IColor)obj); + else if (t == typeof(RGBA)) return Equals((IColorFloat)obj); + else if (t == typeof(HSVA)) return Equals((IColorFloat)obj); + else if (t == typeof(IColorFloat)) return Equals((IColorFloat)obj); else if (t == typeof(RGBAByte)) return Equals((IColorByte)obj); else if (t == typeof(CMYKAByte)) return Equals((IColorByte)obj); else if (t == typeof(HSVAByte)) return Equals((IColorByte)obj); @@ -196,7 +196,7 @@ public struct CMYKA : IColor, IEquatable public RGBA ToRGBA() { float kInv = 1 - K, r = 1 - C, g = 1 - M, b = 1 - Y; - return new(r * kInv, g * kInv, b * kInv); + return new(r * kInv, g * kInv, b * kInv, A); } public CMYKA ToCMYKA() => this; public HSVA ToHSVA() => ToRGBA().ToHSVA(); diff --git a/Nerd_STF/Graphics/CMYKAByte.cs b/Nerd_STF/Graphics/CMYKAByte.cs index 92ce249..ee85963 100644 --- a/Nerd_STF/Graphics/CMYKAByte.cs +++ b/Nerd_STF/Graphics/CMYKAByte.cs @@ -143,7 +143,7 @@ public struct CMYKAByte : IColorByte, IEquatable return (Cs, Ms, Ys, Ks, As); } - public bool Equals(IColor? col) => col != null && Equals(col.ToCMYKAByte()); + public bool Equals(IColorFloat? col) => col != null && Equals(col.ToCMYKAByte()); public bool Equals(IColorByte? col) => col != null && Equals(col.ToCMYKAByte()); public bool Equals(CMYKAByte col) => A == 0 && col.A == 0 || K == 1 && col.K == 255 || C == col.C && M == col.M && Y == col.Y && K == col.K && A == col.A; @@ -152,11 +152,11 @@ public struct CMYKAByte : IColorByte, IEquatable if (obj == null) return base.Equals(obj); Type t = obj.GetType(); if (t == typeof(CMYKAByte)) return Equals((CMYKAByte)obj); - else if (t == typeof(RGBA)) return Equals((IColor)obj); - else if (t == typeof(HSVA)) return Equals((IColor)obj); - else if (t == typeof(IColor)) return Equals((IColor)obj); + else if (t == typeof(RGBA)) return Equals((IColorFloat)obj); + else if (t == typeof(HSVA)) return Equals((IColorFloat)obj); + else if (t == typeof(IColorFloat)) return Equals((IColorFloat)obj); else if (t == typeof(RGBAByte)) return Equals((IColorByte)obj); - else if (t == typeof(CMYKA)) return Equals((IColor)obj); + else if (t == typeof(CMYKA)) return Equals((IColorFloat)obj); else if (t == typeof(HSVAByte)) return Equals((IColorByte)obj); else if (t == typeof(IColorByte)) return Equals((IColorByte)obj); @@ -174,11 +174,11 @@ public struct CMYKAByte : IColorByte, IEquatable public RGBA ToRGBA() => ToCMYKA().ToRGBA(); public CMYKA ToCMYKA() => new(C / 255f, M / 255f, Y / 255f, K / 255f, A / 255f); - public HSVA ToHSVA() => ToRGBA().ToHSVA(); + public HSVA ToHSVA() => ToCMYKA().ToHSVA(); public RGBAByte ToRGBAByte() => ToCMYKA().ToRGBAByte(); public CMYKAByte ToCMYKAByte() => this; - public HSVAByte ToHSVAByte() => ToRGBA().ToHSVAByte(); + public HSVAByte ToHSVAByte() => ToCMYKA().ToHSVAByte(); public byte[] ToArray() => new[] { C, M, Y, K, A }; public Fill ToFill() @@ -216,12 +216,12 @@ public struct CMYKAByte : IColorByte, IEquatable public static CMYKAByte operator /(CMYKAByte a, int b) => new(a.C / b, a.M / b, a.Y / b, a.K / b, a.A / b); public static CMYKAByte operator /(CMYKAByte a, float b) => (a.ToCMYKA() / b).ToCMYKAByte(); - public static bool operator ==(CMYKAByte a, RGBA b) => a.Equals((IColor?)b); - public static bool operator !=(CMYKAByte a, RGBA b) => !a.Equals((IColor?)b); - public static bool operator ==(CMYKAByte a, CMYKA b) => a.Equals((IColor?)b); - public static bool operator !=(CMYKAByte a, CMYKA b) => !a.Equals((IColor?)b); - public static bool operator ==(CMYKAByte a, HSVA b) => a.Equals((IColor?)b); - public static bool operator !=(CMYKAByte a, HSVA b) => !a.Equals((IColor?)b); + public static bool operator ==(CMYKAByte a, RGBA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(CMYKAByte a, RGBA b) => !a.Equals((IColorFloat?)b); + public static bool operator ==(CMYKAByte a, CMYKA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(CMYKAByte a, CMYKA b) => !a.Equals((IColorFloat?)b); + public static bool operator ==(CMYKAByte a, HSVA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(CMYKAByte a, HSVA b) => !a.Equals((IColorFloat?)b); public static bool operator ==(CMYKAByte a, RGBAByte b) => a.Equals(b); public static bool operator !=(CMYKAByte a, RGBAByte b) => !a.Equals(b); public static bool operator ==(CMYKAByte a, CMYKAByte b) => a.Equals(b); diff --git a/Nerd_STF/Graphics/HSVA.cs b/Nerd_STF/Graphics/HSVA.cs index 455b833..222a28a 100644 --- a/Nerd_STF/Graphics/HSVA.cs +++ b/Nerd_STF/Graphics/HSVA.cs @@ -1,6 +1,6 @@ namespace Nerd_STF.Graphics; -public struct HSVA : IColor, IEquatable +public struct HSVA : IColorFloat, IEquatable { public static HSVA Black => new(Angle.Zero, 0, 0); public static HSVA Blue => new(new Angle(240), 1, 1); @@ -159,7 +159,7 @@ public struct HSVA : IColor, IEquatable return (Hs, Ss, Vs, As); } - public bool Equals(IColor? col) => col != null && Equals(col.ToHSVA()); + public bool Equals(IColorFloat? col) => col != null && Equals(col.ToHSVA()); public bool Equals(IColorByte? col) => col != null && Equals(col.ToHSVA()); public bool Equals(HSVA col) => S == 0 && col.S == 0 || V == 0 && col.V == 0 || A == 0 && col.A == 0 || H == col.H && S == col.S && V == col.V && A == col.A; @@ -168,9 +168,9 @@ public struct HSVA : IColor, IEquatable if (obj == null) return base.Equals(obj); Type t = obj.GetType(); if (t == typeof(HSVA)) return Equals((HSVA)obj); - else if (t == typeof(CMYKA)) return Equals((IColor)obj); - else if (t == typeof(RGBA)) return Equals((IColor)obj); - else if (t == typeof(IColor)) return Equals((IColor)obj); + else if (t == typeof(CMYKA)) return Equals((IColorFloat)obj); + else if (t == typeof(RGBA)) return Equals((IColorFloat)obj); + else if (t == typeof(IColorFloat)) return Equals((IColorFloat)obj); else if (t == typeof(RGBAByte)) return Equals((IColorByte)obj); else if (t == typeof(CMYKAByte)) return Equals((IColorByte)obj); else if (t == typeof(HSVAByte)) return Equals((IColorByte)obj); @@ -195,7 +195,7 @@ public struct HSVA : IColor, IEquatable else if (d < 240) vals = (0, x, c); else if (d < 300) vals = (x, 0, c); else if (d < 360) vals = (c, 0, x); - return new(vals.r + m, vals.g + m, vals.b + m); + return new(vals.r + m, vals.g + m, vals.b + m, A); } public CMYKA ToCMYKA() => ToRGBA().ToCMYKA(); public HSVA ToHSVA() => this; diff --git a/Nerd_STF/Graphics/HSVAByte.cs b/Nerd_STF/Graphics/HSVAByte.cs index 8d2bb80..f7e5a08 100644 --- a/Nerd_STF/Graphics/HSVAByte.cs +++ b/Nerd_STF/Graphics/HSVAByte.cs @@ -130,7 +130,7 @@ public struct HSVAByte : IColorByte, IEquatable return (Hs, Ss, Vs, As); } - public bool Equals(IColor? col) => col != null && Equals(col.ToHSVAByte()); + public bool Equals(IColorFloat? col) => col != null && Equals(col.ToHSVAByte()); public bool Equals(IColorByte? col) => col != null && Equals(col.ToHSVAByte()); public bool Equals(HSVAByte col) => S == 0 && col.S == 0 || V == 0 && col.V == 0 || A == 0 && col.A == 0 || H == col.H && S == col.S && V == col.V && A == col.A; @@ -139,12 +139,12 @@ public struct HSVAByte : IColorByte, IEquatable if (obj == null) return base.Equals(obj); Type t = obj.GetType(); if (t == typeof(HSVAByte)) return Equals((HSVAByte)obj); - else if (t == typeof(CMYKA)) return Equals((IColor)obj); - else if (t == typeof(RGBA)) return Equals((IColor)obj); - else if (t == typeof(IColor)) return Equals((IColor)obj); + else if (t == typeof(CMYKA)) return Equals((IColorFloat)obj); + else if (t == typeof(RGBA)) return Equals((IColorFloat)obj); + else if (t == typeof(IColorFloat)) return Equals((IColorFloat)obj); else if (t == typeof(RGBAByte)) return Equals((IColorByte)obj); else if (t == typeof(CMYKAByte)) return Equals((IColorByte)obj); - else if (t == typeof(HSVA)) return Equals((IColor)obj); + else if (t == typeof(HSVA)) return Equals((IColorFloat)obj); else if (t == typeof(IColorByte)) return Equals((IColorByte)obj); return base.Equals(obj); @@ -192,12 +192,12 @@ public struct HSVAByte : IColorByte, IEquatable public static HSVAByte operator /(HSVAByte a, HSVAByte b) => new(a.H / b.H, a.S / b.S, a.V / b.V, a.A / b.A); public static HSVAByte operator /(HSVAByte a, int b) => new(a.H / b, a.S / b, a.V / b, a.A / b); public static HSVAByte operator /(HSVAByte a, float b) => (a.ToHSVA() * b).ToHSVAByte(); - public static bool operator ==(HSVAByte a, RGBA b) => a.Equals((IColor?)b); - public static bool operator !=(HSVAByte a, RGBA b) => !a.Equals((IColor?)b); - public static bool operator ==(HSVAByte a, CMYKA b) => a.Equals((IColor?)b); - public static bool operator !=(HSVAByte a, CMYKA b) => !a.Equals((IColor?)b); - public static bool operator ==(HSVAByte a, HSVA b) => a.Equals((IColor?)b); - public static bool operator !=(HSVAByte a, HSVA b) => !a.Equals((IColor?)b); + public static bool operator ==(HSVAByte a, RGBA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(HSVAByte a, RGBA b) => !a.Equals((IColorFloat?)b); + public static bool operator ==(HSVAByte a, CMYKA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(HSVAByte a, CMYKA b) => !a.Equals((IColorFloat?)b); + public static bool operator ==(HSVAByte a, HSVA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(HSVAByte a, HSVA b) => !a.Equals((IColorFloat?)b); public static bool operator ==(HSVAByte a, RGBAByte b) => a.Equals(b); public static bool operator !=(HSVAByte a, RGBAByte b) => !a.Equals(b); public static bool operator ==(HSVAByte a, CMYKAByte b) => a.Equals(b); diff --git a/Nerd_STF/Graphics/IColor.cs b/Nerd_STF/Graphics/IColor.cs index 1bdeeb4..3b7f701 100644 --- a/Nerd_STF/Graphics/IColor.cs +++ b/Nerd_STF/Graphics/IColor.cs @@ -1,6 +1,6 @@ namespace Nerd_STF.Graphics; -public interface IColor : ICloneable, IEquatable, IEquatable, IGroup +public interface IColor : ICloneable, IEquatable, IEquatable { public RGBA ToRGBA(); public CMYKA ToCMYKA(); diff --git a/Nerd_STF/Graphics/IColorByte.cs b/Nerd_STF/Graphics/IColorByte.cs index 1f3ab76..903293d 100644 --- a/Nerd_STF/Graphics/IColorByte.cs +++ b/Nerd_STF/Graphics/IColorByte.cs @@ -1,12 +1,3 @@ namespace Nerd_STF.Graphics; -public interface IColorByte : ICloneable, IEquatable, IEquatable, IGroup -{ - public RGBA ToRGBA(); - public CMYKA ToCMYKA(); - public HSVA ToHSVA(); - - public RGBAByte ToRGBAByte(); - public CMYKAByte ToCMYKAByte(); - public HSVAByte ToHSVAByte(); -} +public interface IColorByte : IColor, IGroup { } diff --git a/Nerd_STF/Graphics/IColorFloat.cs b/Nerd_STF/Graphics/IColorFloat.cs new file mode 100644 index 0000000..2978b35 --- /dev/null +++ b/Nerd_STF/Graphics/IColorFloat.cs @@ -0,0 +1,3 @@ +namespace Nerd_STF.Graphics; + +public interface IColorFloat : IColor, IGroup { } diff --git a/Nerd_STF/Graphics/Image.cs b/Nerd_STF/Graphics/Image.cs index f6a35b1..44200e2 100644 --- a/Nerd_STF/Graphics/Image.cs +++ b/Nerd_STF/Graphics/Image.cs @@ -15,12 +15,13 @@ public struct Image : ICloneable, IEnumerable, IEquatable { Pixels = new IColor[width, height]; Size = new(width, height); - for (int y = 0; y < width; y++) for (int x = 0; x < height; x++) Pixels[x, y] = cols[y * width + x]; + for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) Pixels[x, y] = cols[y * width + x]; } public Image(int width, int height, IColor[,] cols) { - Pixels = cols; + Pixels = new IColor[width, height]; Size = new(width, height); + for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) Pixels[x, y] = cols[y, x]; } public Image(int width, int height, Fill fill) { @@ -32,28 +33,13 @@ public struct Image : ICloneable, IEnumerable, IEquatable { Pixels = new IColor[width, height]; Size = new(width, height); - for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) Pixels[x, y] = fill(x, y); - } - public Image(int width, int height, Fill fill) - { - Pixels = new IColor[width, height]; - Size = new(width, height); - for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) - Pixels[x, y] = (IColor)fill(y * width + x); - } - public Image(int width, int height, Fill2D fill) - { - Pixels = new IColor[width, height]; - Size = new(width, height); - for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) Pixels[x, y] = (IColor)fill(x, y); + for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) Pixels[x, y] = fill(y, x); } public Image(Int2 size) : this(size.x, size.y) { } public Image(Int2 size, IColor[] cols) : this(size.x, size.y, cols) { } public Image(Int2 size, IColor[,] cols) : this(size.x, size.y, cols) { } public Image(Int2 size, Fill fill) : this(size.x, size.y, fill) { } public Image(Int2 size, Fill2D fill) : this(size.x, size.y, fill) { } - public Image(Int2 size, Fill fill) : this(size.x, size.y, fill) { } - public Image(Int2 size, Fill2D fill) : this(size.x, size.y, fill) { } public IColor this[int indexX, int indexY] { @@ -124,7 +110,7 @@ public struct Image : ICloneable, IEnumerable, IEquatable for (int y = 0; y < Size.y; y++) for (int x = 0; x < Size.x; x++) { HSVA col = Pixels[x, y].ToHSVA(); - col.S = (set ? 0 : col.S) + value; + col.S = (set ? 0 : col.S) * value; Pixels[x, y] = col; } } @@ -144,7 +130,7 @@ public struct Image : ICloneable, IEnumerable, IEquatable for (int y = 0; y < newSize.y; y++) for (int x = 0; x < newSize.x; x++) { Float2 f = new((float)x / newSize.x, (float)y / newSize.y); - RGBA col = Pixels[Mathf.RoundInt(f.x * Size.x), Mathf.RoundInt(f.y * Size.y)].ToRGBA(); + RGBA col = Pixels[Mathf.Floor(f.x * Size.x), Mathf.Floor(f.y * Size.y)].ToRGBA(); img[x, y] = col; } this = img; diff --git a/Nerd_STF/Graphics/Material.cs b/Nerd_STF/Graphics/Material.cs index d92a20c..71526f4 100644 --- a/Nerd_STF/Graphics/Material.cs +++ b/Nerd_STF/Graphics/Material.cs @@ -5,17 +5,17 @@ public struct Material : ICloneable, IEquatable public float Alpha; public float Anisotropy; public float AnisotropyRoughness; - public IColor AmbientColor; + public IColorFloat AmbientColor; public float ClearcoatRoughness; public float ClearcoatThickness; - public IColor DiffuseColor; - public IColor Emissive; + public IColorFloat DiffuseColor; + public IColorFloat Emissive; public IlluminationModel IllumModel; public float Metallic; public float OpticalDensity; public float Roughness; public float Sheen; - public IColor SpecularColor; + public IColorFloat SpecularColor; public float SpecularExponent; public (Image Image, TextureConfig Config) AlphaTexture; @@ -67,17 +67,17 @@ public struct Material : ICloneable, IEquatable Alpha = (float)fill(0); Anisotropy = (float)fill(1); AnisotropyRoughness = (float)fill(2); - AmbientColor = (IColor)fill(3); + AmbientColor = (IColorFloat)fill(3); ClearcoatRoughness = (float)fill(4); ClearcoatThickness = (float)fill(5); - DiffuseColor = (IColor)fill(6); - Emissive = (IColor)fill(7); + DiffuseColor = (IColorFloat)fill(6); + Emissive = (IColorFloat)fill(7); IllumModel = (IlluminationModel)fill(8); Metallic = (float)fill(9); OpticalDensity = (float)fill(10); Roughness = (float)fill(11); Sheen = (float)fill(12); - SpecularColor = (IColor)fill(13); + SpecularColor = (IColorFloat)fill(13); SpecularExponent = (float)fill(14); AlphaTexture = ((Image, TextureConfig))fill(15); @@ -93,7 +93,7 @@ public struct Material : ICloneable, IEquatable SpecularHighlightTexture = ((Image, TextureConfig))fill(25); StencilTexture = ((Image, TextureConfig))fill(26); } - public Material(IlluminationModel illum, Fill floats, Fill colors, Fill<(Image, TextureConfig)> images) + public Material(IlluminationModel illum, Fill floats, Fill colors, Fill<(Image, TextureConfig)> images) { Alpha = floats(0); Anisotropy = floats(1); diff --git a/Nerd_STF/Graphics/RGBA.cs b/Nerd_STF/Graphics/RGBA.cs index 5f8211d..f3be995 100644 --- a/Nerd_STF/Graphics/RGBA.cs +++ b/Nerd_STF/Graphics/RGBA.cs @@ -1,6 +1,6 @@ namespace Nerd_STF.Graphics; -public struct RGBA : IColor, IEquatable +public struct RGBA : IColorFloat, IEquatable { public static RGBA Black => new(0, 0, 0); public static RGBA Blue => new(0, 0, 1); @@ -149,7 +149,7 @@ public struct RGBA : IColor, IEquatable return (Rs, Gs, Bs, As); } - public bool Equals(IColor? col) => col != null && Equals(col.ToRGBA()); + public bool Equals(IColorFloat? col) => col != null && Equals(col.ToRGBA()); public bool Equals(IColorByte? col) => col != null && Equals(col.ToRGBA()); public bool Equals(RGBA col) => A == 0 && col.A == 0 || R == col.R && G == col.G && B == col.B && A == col.A; public override bool Equals([NotNullWhen(true)] object? obj) @@ -157,9 +157,9 @@ public struct RGBA : IColor, IEquatable if (obj == null) return base.Equals(obj); Type t = obj.GetType(); if (t == typeof(RGBA)) return Equals((RGBA)obj); - else if (t == typeof(CMYKA)) return Equals((IColor)obj); - else if (t == typeof(HSVA)) return Equals((IColor)obj); - else if (t == typeof(IColor)) return Equals((IColor)obj); + else if (t == typeof(CMYKA)) return Equals((IColorFloat)obj); + else if (t == typeof(HSVA)) return Equals((IColorFloat)obj); + else if (t == typeof(IColorFloat)) return Equals((IColorFloat)obj); else if (t == typeof(RGBAByte)) return Equals((IColorByte)obj); else if (t == typeof(CMYKAByte)) return Equals((IColorByte)obj); else if (t == typeof(HSVAByte)) return Equals((IColorByte)obj); diff --git a/Nerd_STF/Graphics/RGBAByte.cs b/Nerd_STF/Graphics/RGBAByte.cs index 26a07ae..a8eb8b0 100644 --- a/Nerd_STF/Graphics/RGBAByte.cs +++ b/Nerd_STF/Graphics/RGBAByte.cs @@ -132,7 +132,7 @@ public struct RGBAByte : IColorByte, IEquatable return (Rs, Gs, Bs, As); } - public bool Equals(IColor? col) => col != null && Equals(col.ToRGBAByte()); + public bool Equals(IColorFloat? col) => col != null && Equals(col.ToRGBAByte()); public bool Equals(IColorByte? col) => col != null && Equals(col.ToRGBAByte()); public bool Equals(RGBAByte col) => A == 0 && col.A == 0 || R == col.R && G == col.G && B == col.B && A == col.A; public override bool Equals([NotNullWhen(true)] object? obj) @@ -140,9 +140,9 @@ public struct RGBAByte : IColorByte, IEquatable if (obj == null) return base.Equals(obj); Type t = obj.GetType(); if (t == typeof(RGBAByte)) return Equals((RGBAByte)obj); - else if (t == typeof(CMYKA)) return Equals((IColor)obj); - else if (t == typeof(HSVA)) return Equals((IColor)obj); - else if (t == typeof(IColor)) return Equals((IColor)obj); + else if (t == typeof(CMYKA)) return Equals((IColorFloat)obj); + else if (t == typeof(HSVA)) return Equals((IColorFloat)obj); + else if (t == typeof(IColorFloat)) return Equals((IColorFloat)obj); else if (t == typeof(RGBA)) return Equals((IColorByte)obj); else if (t == typeof(CMYKAByte)) return Equals((IColorByte)obj); else if (t == typeof(HSVAByte)) return Equals((IColorByte)obj); @@ -195,12 +195,12 @@ public struct RGBAByte : IColorByte, IEquatable public static RGBAByte operator /(RGBAByte a, RGBAByte b) => new(a.R / b.R, a.G / b.G, a.B / b.B, a.A / b.A); public static RGBAByte operator /(RGBAByte a, int b) => new(a.R / b, a.G / b, a.B / b, a.A / b); public static RGBAByte operator /(RGBAByte a, float b) => (a.ToRGBA() / b).ToRGBAByte(); - public static bool operator ==(RGBAByte a, RGBA b) => a.Equals((IColor?)b); - public static bool operator !=(RGBAByte a, RGBA b) => !a.Equals((IColor?)b); - public static bool operator ==(RGBAByte a, CMYKA b) => a.Equals((IColor?)b); - public static bool operator !=(RGBAByte a, CMYKA b) => !a.Equals((IColor?)b); - public static bool operator ==(RGBAByte a, HSVA b) => a.Equals((IColor?)b); - public static bool operator !=(RGBAByte a, HSVA b) => !a.Equals((IColor?)b); + public static bool operator ==(RGBAByte a, RGBA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(RGBAByte a, RGBA b) => !a.Equals((IColorFloat?)b); + public static bool operator ==(RGBAByte a, CMYKA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(RGBAByte a, CMYKA b) => !a.Equals((IColorFloat?)b); + public static bool operator ==(RGBAByte a, HSVA b) => a.Equals((IColorFloat?)b); + public static bool operator !=(RGBAByte a, HSVA b) => !a.Equals((IColorFloat?)b); public static bool operator ==(RGBAByte a, RGBAByte b) => a.Equals(b); public static bool operator !=(RGBAByte a, RGBAByte b) => !a.Equals(b); public static bool operator ==(RGBAByte a, CMYKAByte b) => a.Equals(b); diff --git a/Nerd_STF/Mathematics/Algebra/Vector2d.cs b/Nerd_STF/Mathematics/Algebra/Vector2d.cs index 36b1831..0e5bed9 100644 --- a/Nerd_STF/Mathematics/Algebra/Vector2d.cs +++ b/Nerd_STF/Mathematics/Algebra/Vector2d.cs @@ -107,7 +107,7 @@ public struct Vector2d : ICloneable, IComparable, IEquatable public bool Equals(Vector2d other) => theta == other.theta && magnitude == other.magnitude; public override int GetHashCode() => theta.GetHashCode() ^ magnitude.GetHashCode(); public override string ToString() => ToString((string?)null); - public string ToString(Angle.Type outputType = Angle.Type.Degrees) => ToString((string?)null, outputType); + public string ToString(Angle.Type outputType) => ToString((string?)null, outputType); public string ToString(string? provider, Angle.Type outputType = Angle.Type.Degrees) => "Mag: " + magnitude.ToString(provider) + " Rot: " + theta.ToString(provider, outputType); public string ToString(IFormatProvider provider, Angle.Type outputType = Angle.Type.Degrees) => diff --git a/Nerd_STF/Mathematics/Algebra/Vector3d.cs b/Nerd_STF/Mathematics/Algebra/Vector3d.cs index 8b47cee..c363d79 100644 --- a/Nerd_STF/Mathematics/Algebra/Vector3d.cs +++ b/Nerd_STF/Mathematics/Algebra/Vector3d.cs @@ -145,15 +145,20 @@ public struct Vector3d : ICloneable, IComparable, IEquatable public bool Equals(Vector3d other) => yaw == other.yaw && pitch == other.pitch && magnitude == other.magnitude; public override int GetHashCode() => yaw.GetHashCode() ^ pitch.GetHashCode() ^ magnitude.GetHashCode(); + public override string ToString() => ToString((string?)null); + public string ToString(Angle.Type outputType) => ToString((string?)null, outputType); public string ToString(string? provider, Angle.Type outputType = Angle.Type.Degrees) => - "Mag: " + magnitude.ToString(provider) + " Theta: " + yaw.ToString(provider, outputType) + - " Phi: " + pitch.ToString(provider, outputType); + "Mag: " + magnitude.ToString(provider) + " Yaw: " + yaw.ToString(provider, outputType) + + " Pitch: " + pitch.ToString(provider, outputType); + public string ToString(IFormatProvider provider, Angle.Type outputType = Angle.Type.Degrees) => + "Mag: " + magnitude.ToString(provider) + " Yaw: " + yaw.ToString(provider, outputType) + + " Pitch: " + pitch.ToString(provider, outputType); public object Clone() => new Vector3d(yaw, pitch, magnitude); - public Float3 ToXYZ() => new(Mathf.Sin(pitch) * Mathf.Cos(yaw) * magnitude, - Mathf.Sin(pitch) * Mathf.Sin(yaw) * magnitude, - Mathf.Cos(pitch) * magnitude); + public Float3 ToXYZ() => new Float3(Mathf.Sin(pitch) * Mathf.Sin(yaw), + Mathf.Cos(yaw), + Mathf.Cos(pitch) * Mathf.Sin(yaw)) * magnitude; public static Vector3d operator +(Vector3d a, Vector3d b) => new(a.yaw + b.yaw, a.pitch + b.pitch, a.magnitude + b.magnitude); diff --git a/Nerd_STF/Mathematics/Angle.cs b/Nerd_STF/Mathematics/Angle.cs index c80ed87..17cfe18 100644 --- a/Nerd_STF/Mathematics/Angle.cs +++ b/Nerd_STF/Mathematics/Angle.cs @@ -35,6 +35,8 @@ public struct Angle : ICloneable, IComparable, IEquatable } public Angle Bounded => new(Mathf.AbsoluteMod(p_deg, 360)); + public Angle Complimentary => Quarter - this; + public Angle Supplementary => Half - this; public Angle Reflected => new Angle(-p_deg).Bounded; private float p_deg; diff --git a/Nerd_STF/Mathematics/Float2.cs b/Nerd_STF/Mathematics/Float2.cs index 3f9f29e..4e31c6e 100644 --- a/Nerd_STF/Mathematics/Float2.cs +++ b/Nerd_STF/Mathematics/Float2.cs @@ -174,6 +174,7 @@ public struct Float2 : ICloneable, IComparable, IEquatable, IGro public static Float2 operator *(Float2 a, Float2 b) => new(a.x * b.x, a.y * b.y); public static Float2 operator *(Float2 a, float b) => new(a.x * b, a.y * b); public static Float2 operator *(Float2 a, Matrix b) => (Float2)((Matrix)a * b); + public static Quaternion operator *(Float2 a, Quaternion b) => (Quaternion)a * b; public static Float2 operator /(Float2 a, Float2 b) => new(a.x / b.x, a.y / b.y); public static Float2 operator /(Float2 a, float b) => new(a.x / b, a.y / b); public static Float2 operator /(Float2 a, Matrix b) => (Float2)((Matrix)a / b); diff --git a/Nerd_STF/Mathematics/Float3.cs b/Nerd_STF/Mathematics/Float3.cs index 9d28ee4..1e7b41b 100644 --- a/Nerd_STF/Mathematics/Float3.cs +++ b/Nerd_STF/Mathematics/Float3.cs @@ -191,7 +191,10 @@ public struct Float3 : ICloneable, IComparable, IEquatable, IGro public Vector3d ToVector() { float mag = Magnitude; - return new(Mathf.ArcTan(y / x), Mathf.ArcCos(z / mag), mag); + Float3 normalized = Normalized; + Angle yaw = Mathf.ArcCos(normalized.y); + Angle pitch = Mathf.ArcSin(normalized.x / Mathf.Sin(yaw)); + return new(yaw, pitch, mag); } public static Float3 operator +(Float3 a, Float3 b) => new(a.x + b.x, a.y + b.y, a.z + b.z); @@ -200,6 +203,7 @@ public struct Float3 : ICloneable, IComparable, IEquatable, IGro public static Float3 operator *(Float3 a, Float3 b) => new(a.x * b.x, a.y * b.y, a.z * b.z); public static Float3 operator *(Float3 a, float b) => new(a.x * b, a.y * b, a.z * b); public static Float3 operator *(Float3 a, Matrix b) => (Float3)((Matrix)a * b); + public static Quaternion operator *(Float3 a, Quaternion b) => (Quaternion)a * b; public static Float3 operator /(Float3 a, Float3 b) => new(a.x / b.x, a.y / b.y, a.z / b.z); public static Float3 operator /(Float3 a, float b) => new(a.x / b, a.y / b, a.z / b); public static Float3 operator /(Float3 a, Matrix b) => (Float3)((Matrix)a / b); diff --git a/Nerd_STF/Mathematics/Geometry/ITriangulatable.cs b/Nerd_STF/Mathematics/Geometry/ITriangulatable.cs index 8097f74..363bf0a 100644 --- a/Nerd_STF/Mathematics/Geometry/ITriangulatable.cs +++ b/Nerd_STF/Mathematics/Geometry/ITriangulatable.cs @@ -8,6 +8,12 @@ public interface ITriangulatable foreach (ITriangulatable triangulatable in triangulatables) res.AddRange(triangulatable.Triangulate()); return res.ToArray(); } + public static Triangle[] TriangulateAll(params T[] triangulatables) where T : ITriangulatable + { + List res = new(); + foreach (ITriangulatable triangulatable in triangulatables) res.AddRange(triangulatable.Triangulate()); + return res.ToArray(); + } public Triangle[] Triangulate(); } diff --git a/Nerd_STF/Mathematics/NumberSystems/Complex.cs b/Nerd_STF/Mathematics/NumberSystems/Complex.cs index fa4db6a..0ffe053 100644 --- a/Nerd_STF/Mathematics/NumberSystems/Complex.cs +++ b/Nerd_STF/Mathematics/NumberSystems/Complex.cs @@ -170,6 +170,7 @@ public struct Complex : ICloneable, IComparable, IEquatable, I public static Complex operator /(Complex a, Complex b) => a * b.Inverse; public static Complex operator /(Complex a, float b) => new(a.u / b, a.i / b); public static Complex operator /(Complex a, Matrix b) => (Complex)((Matrix)a / b); + public static Complex operator ~(Complex v) => v.Conjugate; public static bool operator ==(Complex a, Complex b) => a.Equals(b); public static bool operator !=(Complex a, Complex b) => !a.Equals(b); public static bool operator >(Complex a, Complex b) => a.CompareTo(b) > 0; diff --git a/Nerd_STF/Mathematics/NumberSystems/Quaternion.cs b/Nerd_STF/Mathematics/NumberSystems/Quaternion.cs index d3eba84..987a583 100644 --- a/Nerd_STF/Mathematics/NumberSystems/Quaternion.cs +++ b/Nerd_STF/Mathematics/NumberSystems/Quaternion.cs @@ -14,12 +14,21 @@ public struct Quaternion : ICloneable, IComparable, IEquatable new(1, 1, 1, 1); public static Quaternion Zero => new(0, 0, 0, 0); - public Quaternion Conjugate => new(u, -i, -j, -k); + public Quaternion Conjugate => new(u, -IJK); public Quaternion Inverse => Conjugate / (u * u + i * i + j * j + k * k); public float Magnitude => Mathf.Sqrt(u * u + i * i + j * j + k * k); public Quaternion Normalized => this * Mathf.InverseSqrt(u * u + i * i + j * j + k * k); - public Float3 IJK => new(i, j, k); + public Float3 IJK + { + get => new(i, j, k); + set + { + i = value.x; + j = value.y; + k = value.z; + } + } public float u, i, j, k; @@ -136,27 +145,31 @@ public struct Quaternion : ICloneable, IComparable, IEquatable FromAngles(new(vals.x, valType), new(vals.y, valType), new(vals.z, valType)); - [Obsolete("This method does not produce the correct output. Please update to a newer release.")] public static Quaternion FromVector(Vector3d vec) => FromAngles(vec.yaw, vec.pitch); public static (float[] Us, float[] Is, float[] Js, float[] Ks) SplitArray(params Quaternion[] vals) @@ -193,18 +206,8 @@ public struct Quaternion : ICloneable, IComparable, IEquatable new Quaternion(u, i, j, k); - [Obsolete("This method does not produce the correct output. Please update to a newer release.")] public Angle GetAngle() => Mathf.ArcCos(u) * 2; - [Obsolete("This method does not produce the correct output. Please update to a newer release.")] - public Float3 GetAxis() - { - Float3 axis = IJK; - float mag = Magnitude; - - if (mag < 0) return Float3.Zero; - return axis / mag; - } - [Obsolete("This method does not produce the correct output. Please update to a newer release.")] + public Float3 GetAxis() => IJK.Normalized; public (Angle yaw, Angle pitch, Angle roll) ToAngles() { Quaternion doubled = this; @@ -213,42 +216,47 @@ public struct Quaternion : ICloneable, IComparable, IEquatable= 1) + float absr3c1 = Mathf.Absolute(rot.r3c1); + if (absr3c1 >= 1) { - rotMatrix.r1c2 = 2 * (i * j - u * k); - rotMatrix.r1c3 = 2 * (i * k + u * j); - - yaw = Mathf.ArcTan2(-rotMatrix.r1c2, -rotMatrix.r3c1 * rotMatrix.r1c3); - pitch = new(-Constants.HalfPi * rotMatrix.r3c1 / r3c1Abs, Angle.Type.Radians); + yaw = Mathf.ArcTan2(-rot.r1c2, -rot.r3c1 * rot.r1c3); + pitch = new(-Constants.HalfPi * rot.r3c1 / absr3c1, Angle.Type.Radians); roll = Angle.Zero; } else { - yaw = Mathf.ArcTan2(rotMatrix.r2c1, rotMatrix.r1c1); - pitch = Mathf.ArcSin(-rotMatrix.r3c1); - roll = Mathf.ArcTan2(rotMatrix.r3c2, rotMatrix.r3c3); + yaw = Mathf.ArcTan2(rot.r2c1, rot.r1c1); + pitch = Mathf.ArcSin(-rot.r3c1); + roll = Mathf.ArcTan2(rot.r3c2, rot.r3c3); } return (yaw, pitch, roll); } - [Obsolete("This method does not produce the correct output. Please update to a newer release.")] - public Vector3d ToVector() + public Float3 ToAnglesFloat3(Angle.Type type = Angle.Type.Degrees) { - (Angle yaw, Angle pitch, _) = ToAngles(); - return new(yaw, pitch); + (Angle yaw, Angle pitch, Angle roll) = ToAngles(); + return new(yaw.ValueFromType(type), pitch.ValueFromType(type), roll.ValueFromType(type)); } - public Quaternion Rotate(Quaternion other) => other * this * other.Conjugate; + public Quaternion Rotate(Quaternion other) => this * other * Conjugate; + public Float3 Rotate(Float3 other) + { + const float tolerance = 0.001f; + Quaternion res = this * other * Conjugate; + if (Mathf.Absolute(res.u) > tolerance) + throw new MathException("A rotated vector should never have non-zero scalar part."); + return res.IJK; + } + public Vector3d Rotate(Vector3d other) => Rotate(other.ToXYZ()).ToVector(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); public IEnumerator GetEnumerator() @@ -275,7 +283,7 @@ public struct Quaternion : ICloneable, IComparable, IEquatable, IEquatable new(a.u / b, a.i / b, a.j / b, a.k / b); public static Quaternion operator /(Quaternion a, Matrix b) => (Quaternion)((Matrix)a / b); public static Quaternion operator /(Quaternion a, Float3 b) => a / new Quaternion(b); + public static Quaternion operator ~(Quaternion v) => v.Conjugate; public static bool operator ==(Quaternion a, Quaternion b) => a.Equals(b); public static bool operator !=(Quaternion a, Quaternion b) => !a.Equals(b); public static bool operator >(Quaternion a, Quaternion b) => a.CompareTo(b) > 0; diff --git a/Nerd_STF/Nerd_STF.csproj b/Nerd_STF/Nerd_STF.csproj new file mode 100644 index 0000000..5cc9014 --- /dev/null +++ b/Nerd_STF/Nerd_STF.csproj @@ -0,0 +1,46 @@ + + + + net6.0 + enable + enable + Nerd_STF + Nerd_STF + True + That_One_Nerd + Nerd_STF is a C# library that runs on .Net 6.0, and contains added structures and classes I feel would help the default C# library package. + Copyright (c) 2022 That_One_Nerd + README.md + https://github.com/That-One-Nerd/Nerd_STF + 2.3.1.52 + c#;csharp;c sharp;math;mathematics;mathametics;maths;color;rgb;rgba;cmyk;cmyka;hsv;hsva;calculus;linear algebra;linalg;linearalgebra;matrix;matrix2x2;matrix 2x2;matrix3x3;matrix 3x3;matrix4x4;matrix 4x4;matrix multiplication;vector;vector2d;vector3d;vector2;vector3;float2;float3;float4;int2;int3;int4;angle;geometry;vert;line;polygon;triangle;quadrilateral;sphere;circle;number system;numbersystem;complex numbers;complex;2d numbers;2dnumbers;quaternions;4d numbers;4dnumbers + 2.3.1.52-alpha + Nerd_STF + Nerd_STF + MIT + Logo Square0001.png + The `v2.3.1.x` updates go through every single field and method in Nerd_STF to make sure it works correctly. + https://github.com/That-One-Nerd/Nerd_STF + False + + + + True + + + + True + + + + + True + \ + + + True + \ + + + + diff --git a/Nerd_STF/Nerd_STF.sln b/Nerd_STF/Nerd_STF.sln new file mode 100644 index 0000000..c485096 --- /dev/null +++ b/Nerd_STF/Nerd_STF.sln @@ -0,0 +1,36 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nerd_STF", "Nerd_STF.csproj", "{1F2C87DB-56F2-48B7-8FF6-A12D8E3614DB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Testing", "..\Testing\Testing.csproj", "{53E8335D-AE54-4E34-A692-136786788DD6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{FBAFC98C-AC9E-4E76-A6E7-8F4DB1B23BED}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1F2C87DB-56F2-48B7-8FF6-A12D8E3614DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F2C87DB-56F2-48B7-8FF6-A12D8E3614DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F2C87DB-56F2-48B7-8FF6-A12D8E3614DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F2C87DB-56F2-48B7-8FF6-A12D8E3614DB}.Release|Any CPU.Build.0 = Release|Any CPU + {53E8335D-AE54-4E34-A692-136786788DD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {53E8335D-AE54-4E34-A692-136786788DD6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {53E8335D-AE54-4E34-A692-136786788DD6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {53E8335D-AE54-4E34-A692-136786788DD6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {81A13C28-98B5-49F8-9141-C4A62EE8729F} + EndGlobalSection +EndGlobal diff --git a/Nerd_STF/ScaleType.cs b/Nerd_STF/ScaleType.cs new file mode 100644 index 0000000..21f3dab --- /dev/null +++ b/Nerd_STF/ScaleType.cs @@ -0,0 +1,8 @@ +namespace Nerd_STF; + +public enum ScaleType +{ + X = 1, + Y = 2, + Both = X | Y +} diff --git a/Nerd_STF/bin/Release/net6.0/ref/Nerd_STF.dll b/Nerd_STF/bin/Release/net6.0/ref/Nerd_STF.dll index 33252d88f621d5c17de6225e6b2f70ce6ddc3199..0dfa500895d2c7420f0001c7ccf12a3bd8b96b4c 100644 GIT binary patch literal 113152 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 literal 112640 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
nHfscv3~%zpJc4XuN|BT3XFv# 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 -- 2.49.0.windows.1 From deff917a60ccbb62a491da0dca9f77e4c0160fcd Mon Sep 17 00:00:00 2001 From: That_One_Nerd Date: Mon, 31 Oct 2022 11:50:49 -0400 Subject: [PATCH 2/2] No longer in the gitignore --- Nerd_STF/bin/Release/net6.0/ref/Nerd_STF.dll | Bin 113152 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Nerd_STF/bin/Release/net6.0/ref/Nerd_STF.dll diff --git a/Nerd_STF/bin/Release/net6.0/ref/Nerd_STF.dll b/Nerd_STF/bin/Release/net6.0/ref/Nerd_STF.dll deleted file mode 100644 index 0dfa500895d2c7420f0001c7ccf12a3bd8b96b4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113152 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 -- 2.49.0.windows.1