From b65bdb84ae39e9414444c6c114a2bbc6470295fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sun, 14 Apr 2024 23:57:12 +0200 Subject: [PATCH] ScriptCore: Added Math.remap --- ScriptCore/Math/Math.cs | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/ScriptCore/Math/Math.cs b/ScriptCore/Math/Math.cs index 6a45d3a..df46de5 100644 --- a/ScriptCore/Math/Math.cs +++ b/ScriptCore/Math/Math.cs @@ -1109,4 +1109,56 @@ public static partial class Math public static float4 tanh(float4 value) => new((float)System.Math.Tanh(value.X), (float)System.Math.Tanh(value.Y), (float)System.Math.Tanh(value.Z), (float)System.Math.Tanh(value.W)); #endregion + + #region remap + + /// + /// Remaps a value from one range to another. + /// + /// The value to remap. + /// The minimum value of the old range. + /// The maximum value of the old range. + /// The minimum value of the new range. + /// The maximum value of the new range. + /// The remapped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float remap(float value, float oldMin, float oldMax, float newMin, float newMax) + { + return newMin + (value - oldMin) * (newMax - newMin) / (oldMax - oldMin); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float2 remap(float2 value, float2 oldMin, float2 oldMax, float2 newMin, float2 newMax) + { + return new float2( + remap(value.X, oldMin.X, oldMax.X, newMin.X, newMax.X), + remap(value.Y, oldMin.Y, oldMax.Y, newMin.Y, newMax.Y) + ); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float3 remap(float3 value, float3 oldMin, float3 oldMax, float3 newMin, float3 newMax) + { + return new float3( + remap(value.X, oldMin.X, oldMax.X, newMin.X, newMax.X), + remap(value.Y, oldMin.Y, oldMax.Y, newMin.Y, newMax.Y), + remap(value.Z, oldMin.Z, oldMax.Z, newMin.Z, newMax.Z) + ); + } + + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float4 remap(float4 value, float4 oldMin, float4 oldMax, float4 newMin, float4 newMax) + { + return new float4( + remap(value.X, oldMin.X, oldMax.X, newMin.X, newMax.X), + remap(value.Y, oldMin.Y, oldMax.Y, newMin.Y, newMax.Y), + remap(value.Z, oldMin.Z, oldMax.Z, newMin.Z, newMax.Z), + remap(value.W, oldMin.W, oldMax.W, newMin.W, newMax.W) + ); + } + + #endregion }