annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
1 package com.bartsent.simpleresizer.lib
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
2
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
3 import kotlin.math.PI
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
4 import kotlin.math.abs
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
5 import kotlin.math.sin
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
6
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
7 object LanczosKernel: ScalingKernel {
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
8 override val size = 3.0
8
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
9 private val memory = HashMap<Double, Double>()
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
10 init {
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
11 memory.put(0.0, 1.0)
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
12 }
6
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
13
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
14 private fun sinc(x: Double): Double {
8
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
15 val remembered = memory.get(x)
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
16 if (remembered != null)
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
17 return remembered
6
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
18 val pix = PI * x
8
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
19 val calculated = sin(pix) / pix
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
20 memory.put(x, calculated)
6ae738b8a814 Memoize. Only modest improvement results.
David Barts <n5jrn@me.com>
parents: 6
diff changeset
21 return calculated
6
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
22 }
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
23
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
24 override fun weight(x: Double): Double =
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
25 if (abs(x) < size) sinc(x) * sinc(x/size) else 0.0
e8059b166de1 Lanczos works, but is painfully slow.
David Barts <n5jrn@me.com>
parents:
diff changeset
26 }