view app/src/main/java/com/bartsent/simpleresizer/lib/LanczosKernel.kt @ 8:6ae738b8a814 memo

Memoize. Only modest improvement results.
author David Barts <n5jrn@me.com>
date Wed, 17 Feb 2021 07:43:50 -0800
parents e8059b166de1
children 678adef4774f
line wrap: on
line source

package com.bartsent.simpleresizer.lib

import kotlin.math.PI
import kotlin.math.abs
import kotlin.math.sin

object LanczosKernel: ScalingKernel {
    override val size = 3.0
    private val memory = HashMap<Double, Double>()
    init {
        memory.put(0.0, 1.0)
    }

    private fun sinc(x: Double): Double {
        val remembered = memory.get(x)
        if (remembered != null)
            return remembered
        val pix = PI * x
        val calculated = sin(pix) / pix
        memory.put(x, calculated)
        return calculated
    }

    override fun weight(x: Double): Double =
        if (abs(x) < size) sinc(x) * sinc(x/size) else 0.0
}