/*
 * @Author: Xu.Wang
 * @Date: 2020-03-28 02:04:37
 * @Last Modified by: Xu.Wang
 * @Last Modified time: 2020-04-03 19:22:21
 * @Description: simple math functions
 */

import { Vector3 } from './vector3'

export function absMax(x: number, y: number) {
  return x * x > y * y ? x : y
}

export function absMin(x: number, y: number) {
  return x * x < y * y ? x : y
}

export function muldec(x: number, y: number) {
  return (x * 10 * (y * 10)) / 100
}

export function divdec(x: number, y: number) {
  return (x * 10) / (y * 10) / 100
}

export function swap(x: number, y: number) {
  return [y, x]
}

export function square(x: number) {
  return x * x
}

export function clamp(val: number, min: number, max: number): number {
  return Math.min(Math.max(min, val), max)
}

export function clampV3(val: Vector3, min: Vector3, max: Vector3) {
  return new Vector3(
    clamp(val.x(), min.x(), max.x()),
    clamp(val.y(), min.y(), max.y()),
    clamp(val.z(), min.z(), max.z())
  )
}

export function isSimilar(val1: number, val2: number, epsilon: number) {
  if (Math.abs(val1 - val2) > epsilon) return false

  return true
}
