From 19eb9dd33044b85b4432632d32f33693ed6ba81f Mon Sep 17 00:00:00 2001 From: treeform Date: Sun, 18 Apr 2021 16:50:48 -0700 Subject: [PATCH] 1.0.3: Add fractional, speed up lerp. --- src/vmath.nim | 14 ++++++++++++-- tests/test.nim | 6 ++++++ vmath.nimble | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/vmath.nim b/src/vmath.nim index b8fd378..ab15289 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -51,12 +51,19 @@ proc quantize*[T: SomeFloat](v, n: T): T = ## Makes v be multiple of n. Rounding to integer quantize by 1.0. sign(v) * floor(abs(v) / n) * n +proc fractional*[T: SomeFloat](v: T): T = + ## Returns fractional part of a number. + ## 3.14 -> 0.14 + ## -3.14 -> 0.14 + result = abs(v) + result = result - floor(result) + proc lerp*[T: SomeFloat](a, b, v: T): T = ## Interpolates value between a and b. ## * 0 -> a ## * 1 -> b ## * 0.5 -> between a and b - a * (1.0 - v) + b * v + v * (b - a) + a proc fixAngle*[T: SomeFloat](angle: T): T = ## Make angle be from -PI to PI radians. @@ -339,7 +346,7 @@ genMathFn(ln) genMathFn(log2) genMathFn(sqrt) genMathFn(floor) -genMathFn(ciel) +genMathFn(ceil) genMathFn(abs) proc `~=`*[T](a, b: GVec2[T]): bool = @@ -491,6 +498,9 @@ proc `~=`*[T](a, b: GMat3[T]): bool = proc `~=`*[T](a, b: GMat4[T]): bool = a[0] ~= b[0] and a[1] ~= b[1] and a[2] ~= b[2] and a[3] ~= b[3] +proc pos*[T](a: GMat3[T]): GVec2[T] = + return [a[2][2], a[2][1]] + proc `*`*[T](a, b: GMat3[T]): GMat3[T] = result[0, 0] = b[0, 0] * a[0, 0] + b[0, 1] * a[1, 0] + b[0, 2] * a[2, 0] result[0, 1] = b[0, 0] * a[0, 1] + b[0, 1] * a[1, 1] + b[0, 2] * a[2, 1] diff --git a/tests/test.nim b/tests/test.nim index b3c3aef..4bd01bd 100644 --- a/tests/test.nim +++ b/tests/test.nim @@ -41,6 +41,12 @@ block: doAssert quantize(1.23456789, 0.1) ~= 1.2 doAssert quantize(1.23456789, 0.01) ~= 1.23 + doAssert fractional(0.0) ~= 0.0 + doAssert fractional(3.14) ~= 0.14 + doAssert fractional(-3.14) ~= 0.14 + doAssert fractional(1.23456789) ~= 0.23456789 + doAssert fractional(-1.23456789) ~= 0.23456789 + doAssert lerp(0.0, 1.0, 0.5) ~= 0.5 doAssert lerp(0.0, 10.0, 0.5) ~= 5.0 doAssert lerp(0.0, 100.0, 0.5) ~= 50.0 diff --git a/vmath.nimble b/vmath.nimble index 16d5591..af78ac5 100644 --- a/vmath.nimble +++ b/vmath.nimble @@ -1,4 +1,4 @@ -version = "1.0.2" +version = "1.0.3" author = "treeform" description = "Your single stop for vector math routines for 2d and 3d graphics." license = "MIT"