diff --git a/src/vmath.nim b/src/vmath.nim index 7739f62..131aa85 100644 --- a/src/vmath.nim +++ b/src/vmath.nim @@ -1141,6 +1141,18 @@ proc `xyz=`*(q: var Quat, v: Vec3) = q.y = v.y q.z = v.z +proc `-`*(a: var Quat): Quat = + result.x = -a.x + result.y = -a.y + result.z = -a.z + result.w = -a.w + +proc `+`*(a: Quat, b: Quat): Quat = + result.x = a.x + b.x + result.y = a.y + b.y + result.z = a.z + b.z + result.w = a.w + b.w + proc `*`*(a, b: Quat): Quat = ## Multiply the quaternion by a quaternion. #[ @@ -1331,6 +1343,16 @@ proc hrp*(q: Quat): Vec3 = var t4 = +1.0 - 2.0 * (ysqr + q.z * q.z) result.x = arctan2(t3, t4) +proc dot*(a: Quat, b: Quat): float32 = + a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w + +proc nlerp*(a: Quat, b: Quat, v: float32): Quat = + if dot(a, b) < 0: + var c = a + (-c * (1.0 - v) + b * v).normalize() + else: + (a * (1.0 - v) + b * v).normalize() + proc `$`*(a: Quat): string = return "q(" & a.x.formatfloat(ffDecimal, 8) & ", " &