Skip to content

Commit

Permalink
- Added isEqual method with epsilon for Vec3/Vec4
Browse files Browse the repository at this point in the history
  • Loading branch information
Sunny1337 committed May 7, 2019
1 parent 16fe92e commit 48f0a55
Show file tree
Hide file tree
Showing 3 changed files with 131 additions and 0 deletions.
128 changes: 128 additions & 0 deletions glm/src/main/kotlin/glm_/func/func_vec_relational.kt
Expand Up @@ -909,6 +909,65 @@ interface func_vector3_relational {
return res
}

fun isEqual(a: Vec3t<out Number>, b: Vec3t<out Number>, e: Float): Boolean {
val A = a
var res = false
when (A) {
is Vec3 -> {
res = ((Math.abs(A.x - b.x.f) <= e)
&& (Math.abs(A.y - b.y.f) <= e)
&& (Math.abs(A.z - b.z.f) <= e))
}
is Vec3b -> {
res = ((Math.abs(A.x - b.x.b) <= e)
&& (Math.abs(A.y - b.y.b) <= e)
&& (Math.abs(A.z - b.z.b) <= e))
}
is Vec3d -> {
res = ((Math.abs(A.x - b.x.d) <= e)
&& (Math.abs(A.y - b.y.d) <= e)
&& (Math.abs(A.z - b.z.d) <= e))
}
is Vec3i -> {
res = ((Math.abs(A.x - b.x.i) <= e)
&& (Math.abs(A.y - b.y.i) <= e)
&& (Math.abs(A.z - b.z.i) <= e))
}
is Vec3l -> {
res = ((Math.abs(A.x - b.x.L) <= e)
&& (Math.abs(A.y - b.y.L) <= e)
&& (Math.abs(A.z - b.z.L) <= e))
}
is Vec3s -> {
res = ((Math.abs(A.x - b.x.s) <= e)
&& (Math.abs(A.y - b.y.s) <= e)
&& (Math.abs(A.z - b.z.s) <= e))
}
is Vec3ub -> {
res = ((Math.abs(A.x.v - b.x.b) <= e)
&& (Math.abs(A.y.v - b.y.b) <= e)
&& (Math.abs(A.z.v - b.z.b) <= e))
}
is Vec3ui -> {
res = ((Math.abs(A.x.v - b.x.i) <= e)
&& (Math.abs(A.y.v - b.y.i) <= e)
&& (Math.abs(A.z.v - b.z.i) <= e))
}
is Vec3ul -> {
res = ((Math.abs(A.x.v - b.x.L) <= e)
&& (Math.abs(A.y.v - b.y.L) <= e)
&& (Math.abs(A.z.v - b.z.L) <= e))
}
is Vec3us -> {
res = ((Math.abs(A.x.v - b.x.s) <= e)
&& (Math.abs(A.y.v - b.y.s) <= e)
&& (Math.abs(A.z.v - b.z.s) <= e))
}
}

return res
}

fun any(a: Vec3bool) = a[0] || a[1] || a[2]

fun all(a: Vec3bool) = a[0] && a[1] && a[2]
Expand Down Expand Up @@ -1394,6 +1453,75 @@ interface func_vector4_relational {
return res
}

fun isEqual(a: Vec4t<out Number>, b: Vec4t<out Number>, e: Float): Boolean {
val A = a
var res = false
when (A) {
is Vec4 -> {
res = ((Math.abs(A.x - b.x.f) <= e)
&& (Math.abs(A.y - b.y.f) <= e)
&& (Math.abs(A.z - b.z.f) <= e)
&& (Math.abs(A.w - b.w.f)) <= e)
}
is Vec4b -> {
res = ((Math.abs(A.x - b.x.b) <= e)
&& (Math.abs(A.y - b.y.b) <= e)
&& (Math.abs(A.z - b.z.b) <= e)
&& (Math.abs(A.w - b.w.b)) <= e)
}
is Vec4d -> {
res = ((Math.abs(A.x - b.x.d) <= e)
&& (Math.abs(A.y - b.y.d) <= e)
&& (Math.abs(A.z - b.z.d) <= e)
&& (Math.abs(A.w - b.w.d)) <= e)
}
is Vec4i -> {
res = ((Math.abs(A.x - b.x.i) <= e)
&& (Math.abs(A.y - b.y.i) <= e)
&& (Math.abs(A.z - b.z.i) <= e)
&& (Math.abs(A.w - b.w.i)) <= e)
}
is Vec4l -> {
res = ((Math.abs(A.x - b.x.L) <= e)
&& (Math.abs(A.y - b.y.L) <= e)
&& (Math.abs(A.z - b.z.L) <= e)
&& (Math.abs(A.w - b.w.L)) <= e)
}
is Vec4s -> {
res = ((Math.abs(A.x - b.x.s) <= e)
&& (Math.abs(A.y - b.y.s) <= e)
&& (Math.abs(A.z - b.z.s) <= e)
&& (Math.abs(A.w - b.w.s)) <= e)
}
is Vec4ub -> {
res = ((Math.abs(A.x.v - b.x.b) <= e)
&& (Math.abs(A.y.v - b.y.b) <= e)
&& (Math.abs(A.z.v - b.z.b) <= e)
&& (Math.abs(A.w.v - b.w.b)) <= e)
}
is Vec4ui -> {
res = ((Math.abs(A.x.v - b.x.i) <= e)
&& (Math.abs(A.y.v - b.y.i) <= e)
&& (Math.abs(A.z.v - b.z.i) <= e)
&& (Math.abs(A.w.v - b.w.i)) <= e)
}
is Vec4ul -> {
res = ((Math.abs(A.x.v - b.x.L) <= e)
&& (Math.abs(A.y.v - b.y.L) <= e)
&& (Math.abs(A.z.v - b.z.L) <= e)
&& (Math.abs(A.w.v - b.w.L)) <= e)
}
is Vec4us -> {
res = ((Math.abs(A.x.v - b.x.s) <= e)
&& (Math.abs(A.y.v - b.y.s) <= e)
&& (Math.abs(A.z.v - b.z.s) <= e)
&& (Math.abs(A.w.v - b.w.s)) <= e)
}
}

return res
}

fun any(a: Vec4bool) = a[0] || a[1] || a[2] || a[3]

fun all(a: Vec4bool) = a[0] && a[1] && a[2] && a[3]
Expand Down
1 change: 1 addition & 0 deletions glm/src/main/kotlin/glm_/vec3/Vec3t.kt
Expand Up @@ -222,6 +222,7 @@ abstract class Vec3t<T : Number>: ToBuffer {
fun notEqual(b: Vec3t<out Number>, res: Vec3bool = Vec3bool()) = glm.notEqual(this, b, res)

infix fun isEqual(b: Vec3t<out Number>) = glm.isEqual(this, b)
fun isEqual(b: Vec3t<out Number>, e: Float) = glm.isEqual(this, b,e)

// components alias
var r
Expand Down
2 changes: 2 additions & 0 deletions glm/src/main/kotlin/glm_/vec4/Vec4t.kt
Expand Up @@ -240,6 +240,8 @@ abstract class Vec4t<T : Number>: ToBuffer {

infix fun isEqual(b: Vec4t<out Number>) = glm.isEqual(this, b)

fun isEqual(b: Vec4t<out Number>, e: Float) = glm.isEqual(this, b,e)

// components alias

var r
Expand Down

0 comments on commit 48f0a55

Please sign in to comment.