package org.jwildfire.base.mathlib; public final class GfxMathLib { public static double clamp(double val, double min, double max) { return Math.max(min, Math.min(max, val)); } public static double clamp(double val) { return clamp(val, 0.0, 1.0); } public static double blerp(double c00, double c10, double c01, double c11, double tx, double ty) { return GfxMathLib.lerp(GfxMathLib.lerp(c00, c10, tx), GfxMathLib.lerp(c01, c11, tx), ty); } public static double lerp(double s, double e, double t) { return s + (e - s) * t; } // https://en.wikipedia.org/wiki/Smoothstep public static double smoothstep(double edge0, double edge1, double x) { // Scale, bias and saturate x to 0..1 range x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); // Evaluate polynomial return x * x * (3 - 2 * x); } // https://en.wikipedia.org/wiki/Smoothstep public static double smootherstep(double edge0, double edge1, double x) { // Scale, and clamp x to 0..1 range x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); // Evaluate polynomial return x * x * x * (x * (x * 6 - 15) + 10); } // https://en.wikipedia.org/wiki/Smoothstep public static double smootheststep(double edge0, double edge1, double x) { // Scale, and clamp x to 0..1 range x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); // Evaluate polynomial return x * x * x * x * (x * (x * (x * -20 + 70) - 84) + 35); } public static double step(double edge, double x) { return x < edge ? 0.0 : 1.0; } }