From 82596a8ffdbac1311c55dc8a4daa04459696ca6d Mon Sep 17 00:00:00 2001 From: Astrash Date: Tue, 23 Aug 2022 10:19:00 +1000 Subject: [PATCH] Implement linear map normalizer --- .../dfsek/terra/addons/noise/NoiseAddon.java | 2 ++ .../LinearMapNormalizerTemplate.java | 27 ++++++++++++++++++ .../noise/normalizer/LinearMapNormalizer.java | 28 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/normalizer/LinearMapNormalizerTemplate.java create mode 100644 common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/normalizer/LinearMapNormalizer.java diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java index 913d4e7bc..ddfc1bbe7 100644 --- a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java @@ -33,6 +33,7 @@ import com.dfsek.terra.addons.noise.config.templates.noise.fractal.BrownianMotio import com.dfsek.terra.addons.noise.config.templates.noise.fractal.PingPongTemplate; import com.dfsek.terra.addons.noise.config.templates.noise.fractal.RidgedFractalTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.ClampNormalizerTemplate; +import com.dfsek.terra.addons.noise.config.templates.normalizer.LinearMapNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.LinearNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.NormalNormalizerTemplate; import com.dfsek.terra.addons.noise.config.templates.normalizer.PosterizationNormalizerTemplate; @@ -91,6 +92,7 @@ public class NoiseAddon implements MonadAddonInitializer { .applyLoader(FunctionTemplate.class, FunctionTemplate::new); noiseRegistry.register(base.key("LINEAR"), LinearNormalizerTemplate::new); + noiseRegistry.register(base.key("LINEAR_MAP"), LinearMapNormalizerTemplate::new); noiseRegistry.register(base.key("NORMAL"), NormalNormalizerTemplate::new); noiseRegistry.register(base.key("CLAMP"), ClampNormalizerTemplate::new); noiseRegistry.register(base.key("PROBABILITY"), ProbabilityNormalizerTemplate::new); diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/normalizer/LinearMapNormalizerTemplate.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/normalizer/LinearMapNormalizerTemplate.java new file mode 100644 index 000000000..56a50ad54 --- /dev/null +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/config/templates/normalizer/LinearMapNormalizerTemplate.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.addons.noise.config.templates.normalizer; + +import com.dfsek.tectonic.api.config.template.annotations.Value; + +import com.dfsek.terra.addons.noise.normalizer.LinearMapNormalizer; +import com.dfsek.terra.api.noise.NoiseSampler; + + +public class LinearMapNormalizerTemplate extends NormalizerTemplate { + + @Value("from.a") + private double aFrom; + + @Value("from.b") + private double bFrom; + + @Value("to.a") + private double aTo; + + @Value("to.b") + private double bTo; + + @Override + public NoiseSampler get() { + return new LinearMapNormalizer(function, aFrom, aTo, bFrom, bTo); + } +} diff --git a/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/normalizer/LinearMapNormalizer.java b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/normalizer/LinearMapNormalizer.java new file mode 100644 index 000000000..d124ef8de --- /dev/null +++ b/common/addons/config-noise-function/src/main/java/com/dfsek/terra/addons/noise/normalizer/LinearMapNormalizer.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.addons.noise.normalizer; + +import com.dfsek.terra.api.noise.NoiseSampler; + + +public class LinearMapNormalizer extends Normalizer { + + private final double aFrom; + + private final double aTo; + + private final double bFrom; + + private final double bTo; + + public LinearMapNormalizer(NoiseSampler sampler, double aFrom, double aTo, double bFrom, double bTo) { + super(sampler); + this.aFrom = aFrom; + this.aTo = aTo; + this.bFrom = bFrom; + this.bTo = bTo; + } + + @Override + public double normalize(double in) { + return (in - aFrom) * (aTo - bTo) / (aFrom - bFrom) + aTo; + } +}