{"version":3,"file":"gradii-vector-math.mjs","sources":["../../../../libs/vector-math/src/lib/common.ts","../../../../libs/vector-math/src/lib/vector3.ts","../../../../libs/vector-math/src/lib/vector4.ts","../../../../libs/vector-math/src/lib/quaternion.ts","../../../../libs/vector-math/src/lib/matrix4.ts","../../../../libs/vector-math/src/lib/matrix3.ts","../../../../libs/vector-math/src/lib/vector2.ts","../../../../libs/vector-math/src/lib/aabb2.ts","../../../../libs/vector-math/src/lib/plane.ts","../../../../libs/vector-math/src/lib/triangle.ts","../../../../libs/vector-math/src/lib/aabb3.ts","../../../../libs/vector-math/src/lib/frustum.ts","../../../../libs/vector-math/src/lib/intersection-result.ts","../../../../libs/vector-math/src/lib/matrix2.ts","../../../../libs/vector-math/src/lib/obb3.ts","../../../../libs/vector-math/src/lib/quad.ts","../../../../libs/vector-math/src/lib/ray.ts","../../../../libs/vector-math/src/lib/sphere.ts","../../../../libs/vector-math/src/lib/bezier-curve2.ts","../../../../libs/vector-math/src/lib/helper/bezier-values.ts","../../../../libs/vector-math/src/lib/helper/bezier-functions.ts","../../../../libs/vector-math/src/lib/polygon/rectangle.ts","../../../../libs/vector-math/src/lib/polygon/polygon.ts","../../../../libs/vector-math/src/lib/curve/bezier-curve.ts","../../../../libs/vector-math/src/lib/polygon/polygon-helper.ts","../../../../libs/vector-math/src/index.ts","../../../../libs/vector-math/src/gradii-vector-math.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nexport const EPSILON = 0.000001;\n\nconst degree = Math.PI / 180;\n\n/**\n * to degree by radian\n * @param  radian radian\n * @return  角度\n */\nexport function toDegree(radian: number) {\n  return radian / degree;\n}\n\n/**\n * common mod operation\n *\n * @param  n 被取模的值\n * @param  m 模\n * @return  返回n 被 m 取模的结果\n */\nexport function mod(n: number, m: number) {\n  return ((n % m) + m) % m;\n}\n\n/**\n * Convert Degree To Radian\n *\n * @param  a Angle in Degrees\n */\nexport function toRadian(a: number) {\n  return a * degree;\n}\n\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param  a The first number to test.\n * @param  b The second number to test.\n * @returns   True if the numbers are approximately equal, false otherwise.\n */\nexport function equals(a: number, b: number) {\n  return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\n\n/**\n */\nexport function clamp(value: number, min: number, max: number) {\n  // tslint:disable-next-line:no-nested-ternary\n  return min < max\n    ? (value < min ? min : value > max ? max : value)\n    : (value < max ? max : value > min ? min : value);\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nimport { clamp, EPSILON } from './common';\nimport { Vector2 } from './vector2';\n\nexport class Vector3 {\n  public static up      = new Vector3([0, 1, 0]);\n  public static right   = new Vector3([1, 0, 0]);\n  public static forward = new Vector3([0, 0, 1]);\n\n  private values = new Float32Array(3);\n\n  constructor(values?: number[]);\n\n  constructor(x: number, y: number, z: number);\n\n  constructor(x?: number | number[], y?: number, z?: number) {\n    if (arguments.length === 1) {\n      if (x) {\n        this.values[0] = (x as number[])[0];\n        this.values[1] = (x as number[])[1];\n        this.values[2] = (x as number[])[2];\n      }\n    } else if (arguments.length === 3) {\n      this.values[0] = x as number;\n      this.values[1] = y as number;\n      this.values[2] = z as number;\n    } else {\n      this.values[0] = 0;\n      this.values[1] = 0;\n      this.values[2] = 0;\n    }\n  }\n\n  get x(): number {\n    return this.values[0];\n  }\n\n  set x(value: number) {\n    this.values[0] = value;\n  }\n\n  get y(): number {\n    return this.values[1];\n  }\n\n  set y(value: number) {\n    this.values[1] = value;\n  }\n\n  get z(): number {\n    return this.values[2];\n  }\n\n  set z(value: number) {\n    this.values[2] = value;\n  }\n\n  get xy(): Vector2 {\n    return new Vector2(\n      this.values[0],\n      this.values[1]\n    );\n  }\n\n  set xy(v: Vector2) {\n    this.values[0] = v.x;\n    this.values[1] = v.y;\n  }\n\n  get xyz(): Vector3 {\n    return new Vector3(\n      this.values[0],\n      this.values[1],\n      this.values[2]\n    );\n  }\n\n  set xyz(v: Vector3) {\n    this.values[0] = v.values[0];\n    this.values[1] = v.values[1];\n    this.values[2] = v.values[2];\n  }\n\n  public get length(): number {\n    return Math.sqrt(this.squaredLength);\n  }\n\n  public get squaredLength(): number {\n    const x = this.values[0],\n          y = this.values[1],\n          z = this.values[2];\n\n    return (x * x + y * y + z * z);\n  }\n\n  public static dot(vector: Vector3, vector2: Vector3): number {\n    const x = vector.values[0],\n          y = vector.values[1],\n          z = vector.values[2];\n\n    const x2 = vector2.x,\n          y2 = vector2.y,\n          z2 = vector2.z;\n\n    return (x * x2 + y * y2 + z * z2);\n  }\n\n  public static direction(vector: Vector3, vector2: Vector3, dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = new Vector3();\n    }\n\n    const x = vector.values[0] - vector2.x,\n          y = vector.values[1] - vector2.y,\n          z = vector.values[2] - vector2.z;\n\n    let length = Math.sqrt(x * x + y * y + z * z);\n\n    if (length === 0) {\n      dest.values[0] = 0;\n      dest.values[1] = 0;\n      dest.values[2] = 0;\n\n      return dest;\n    }\n\n    length = 1 / length;\n\n    dest.values[0] = x * length;\n    dest.values[1] = y * length;\n    dest.values[2] = z * length;\n\n    return dest;\n  }\n\n  /// Set the values of [result] to the minimum of [a] and [b] for each line.\n  public static min(a: Vector3, b: Vector3, result: Vector3) {\n    result.setValues(\n      Math.min(a.x, b.x),\n      Math.min(a.y, b.y),\n      Math.min(a.z, b.z)\n    );\n  }\n\n  /// Set the values of [result] to the maximum of [a] and [b] for each line.\n  public static max(a: Vector3, b: Vector3, result: Vector3) {\n    result.setValues(\n      Math.max(a.x, b.x),\n      Math.max(a.y, b.y),\n      Math.max(a.z, b.z)\n    );\n  }\n\n  public static mix(vector: Vector3, vector2: Vector3, time: number,\n                    dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = new Vector3();\n    }\n\n    dest.values[0] = vector.values[0] + time * (vector2.x - vector.values[0]);\n    dest.values[1] = vector.values[1] + time * (vector2.y - vector.values[1]);\n    dest.values[2] = vector.values[2] + time * (vector2.z - vector.values[2]);\n\n    return dest;\n  }\n\n  public static sum(vector: Vector3, vector2: Vector3, dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = new Vector3();\n    }\n\n    dest.values[0] = vector.values[0] + vector2.x;\n    dest.values[1] = vector.values[1] + vector2.y;\n    dest.values[2] = vector.values[2] + vector2.z;\n\n    return dest;\n  }\n\n  public static difference(vector: Vector3, vector2: Vector3, dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = new Vector3();\n    }\n\n    dest.values[0] = vector.values[0] - vector2.x;\n    dest.values[1] = vector.values[1] - vector2.y;\n    dest.values[2] = vector.values[2] - vector2.z;\n\n    return dest;\n  }\n\n  public static product(vector: Vector3, vector2: Vector3, dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = new Vector3();\n    }\n\n    dest.values[0] = vector.values[0] * vector2.x;\n    dest.values[1] = vector.values[1] * vector2.y;\n    dest.values[2] = vector.values[2] * vector2.z;\n\n    return dest;\n  }\n\n  public static quotient(vector: Vector3, vector2: Vector3, dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = new Vector3();\n    }\n\n    dest.values[0] = vector.values[0] / vector2.x;\n    dest.values[1] = vector.values[1] / vector2.y;\n    dest.values[2] = vector.values[2] / vector2.z;\n\n    return dest;\n  }\n\n  public static zero() {\n    return new Vector3(0, 0, 0);\n  }\n\n  public at(index: number): number {\n    return this.values[index];\n  }\n\n  public reset(): void {\n    this.values[0] = 0;\n    this.values[1] = 0;\n    this.values[2] = 0;\n  }\n\n  public copy(dest: Vector3): Vector3 {\n    dest.values[0] = this.values[0];\n    dest.values[1] = this.values[1];\n    dest.values[2] = this.values[2];\n\n    return dest;\n  }\n\n  public setFrom(v: Vector3) {\n    this.values[0] = v.values[0];\n    this.values[1] = v.values[1];\n    this.values[2] = v.values[2];\n\n    return this;\n  }\n\n  public setValues(x: number, y: number, z: number) {\n    this.values[0] = x;\n    this.values[1] = y;\n    this.values[2] = z;\n    return this;\n  }\n\n  public splat(arg: number) {\n    this.values[0] = arg;\n    this.values[1] = arg;\n    this.values[2] = arg;\n    return this;\n  }\n\n  public negate(dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = this;\n    }\n\n    dest.values[0] = -this.values[0];\n    dest.values[1] = -this.values[1];\n    dest.values[2] = -this.values[2];\n\n    return dest;\n  }\n\n  public equals(vector: Vector3, threshold = EPSILON): boolean {\n    if (Math.abs(this.values[0] - vector.values[0]) > threshold) {\n      return false;\n    }\n\n    if (Math.abs(this.values[1] - vector.values[1]) > threshold) {\n      return false;\n    }\n\n    if (Math.abs(this.values[2] - vector.values[2]) > threshold) {\n      return false;\n    }\n\n    return true;\n  }\n\n  public add(vector: Vector3): Vector3 {\n    this.values[0] += vector.values[0];\n    this.values[1] += vector.values[1];\n    this.values[2] += vector.values[2];\n\n    return this;\n  }\n\n  public addScaled(vector: Vector3, factor: number): Vector3 {\n    this.values[0] += vector.values[0] * factor;\n    this.values[1] += vector.values[1] * factor;\n    this.values[2] += vector.values[2] * factor;\n\n    return this;\n  }\n\n  public subtract(vector: Vector3): Vector3 {\n    this.values[0] -= vector.values[0];\n    this.values[1] -= vector.values[1];\n    this.values[2] -= vector.values[2];\n\n    return this;\n  }\n\n  public multiply(vector: Vector3): Vector3 {\n    this.values[0] *= vector.values[0];\n    this.values[1] *= vector.values[1];\n    this.values[2] *= vector.values[2];\n\n    return this;\n  }\n\n  public divide(vector: Vector3): Vector3 {\n    this.values[0] /= vector.values[0];\n    this.values[1] /= vector.values[1];\n    this.values[2] /= vector.values[2];\n\n    return this;\n  }\n\n  public dot(v: Vector3) {\n    return Vector3.dot(this, v);\n  }\n\n  public scale(value: number, dest: Vector3 = null): Vector3 {\n    if (!dest) {\n      dest = this;\n    }\n\n    dest.values[0] *= value;\n    dest.values[1] *= value;\n    dest.values[2] *= value;\n\n    return dest;\n  }\n\n  public scaled(value: number): Vector3 {\n    return this.clone().scale(value);\n  }\n\n  public normalize(): Vector3 {\n    let length = this.length;\n\n    if (length === 1) {\n      return this;\n    }\n\n    if (length === 0) {\n      this.values[0] = 0;\n      this.values[1] = 0;\n      this.values[2] = 0;\n\n      return this;\n    }\n\n    length = 1.0 / length;\n\n    this.values[0] *= length;\n    this.values[1] *= length;\n    this.values[2] *= length;\n\n    return this;\n  }\n\n  public normalized(dest: Vector3) {\n    return new Vector3().copy(dest).normalize();\n  }\n\n  public distanceTo(vector: Vector3): number {\n    return Math.sqrt(this.distanceToSquared(vector));\n  }\n\n  public distanceToSquared(vector: Vector3): number {\n    const x = this.values[0] - vector.values[0],\n          y = this.values[1] - vector.values[1],\n          z = this.values[2] - vector.values[2];\n\n    return (x * x + y * y + z * z);\n  }\n\n  public angleTo(v: Vector3) {\n    if (\n      this.values[0] === v.values[0] &&\n      this.values[1] === v.values[1] &&\n      this.values[2] === v.values[2]\n    ) {\n      return 0;\n    }\n\n    const d = this.dot(v) / (this.length * v.length);\n\n    return Math.acos(clamp(d, -1, 1));\n  }\n\n  public cross(vector: Vector3): Vector3 {\n    const x = vector.values[0],\n          y = vector.values[1],\n          z = vector.values[2];\n\n    const x2 = this.values[0],\n          y2 = this.values[1],\n          z2 = this.values[2];\n\n    this.values[0] = y * z2 - z * y2;\n    this.values[1] = z * x2 - x * z2;\n    this.values[2] = x * y2 - y * x2;\n\n    return this;\n  }\n\n  public crossInto(vector: Vector3, out: Vector3): Vector3 {\n    const x = vector.values[0],\n          y = vector.values[1],\n          z = vector.values[2];\n\n    const x2 = this.values[0],\n          y2 = this.values[1],\n          z2 = this.values[2];\n\n    out.values[0] = y * z2 - z * y2;\n    out.values[1] = z * x2 - x * z2;\n    out.values[2] = x * y2 - y * x2;\n\n    return out;\n  }\n\n  public clone() {\n    return this.copy(new Vector3());\n  }\n\n}\n\nexport interface Vector3 {\n  sub(vector: Vector3): Vector3;\n\n  mul(vector: Vector3): Vector3;\n\n  div(vector: Vector3): Vector3;\n}\n\n// tslint:disable-next-line\nVector3.prototype.sub = Vector3.prototype.subtract;\n// tslint:disable-next-line\nVector3.prototype.mul = Vector3.prototype.multiply;\n// tslint:disable-next-line\nVector3.prototype.div = Vector3.prototype.divide;","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { EPSILON } from './common';\n\nexport class Vector4 {\n  public static zero = new Vector4([0, 0, 0, 1]);\n\n  private values = new Float32Array(4);\n\n  constructor(values?: number[]);\n\n  constructor(x: number, y: number, z: number, w: number);\n\n  constructor(x?: number | number[], y?: number, z?: number, w?: number) {\n    if (arguments.length === 1) {\n      if (x) {\n        this.xyzw = x as number[];\n      }\n    } else if (arguments.length === 4) {\n      this.values[0] = x as number;\n      this.values[1] = y as number;\n      this.values[2] = z as number;\n      this.values[3] = w as number;\n    } else {\n      this.values[0] = 0;\n      this.values[1] = 0;\n      this.values[2] = 0;\n      this.values[3] = 0;\n    }\n  }\n\n  get x(): number {\n    return this.values[0];\n  }\n\n  set x(value: number) {\n    this.values[0] = value;\n  }\n\n  get y(): number {\n    return this.values[1];\n  }\n\n  set y(value: number) {\n    this.values[1] = value;\n  }\n\n  get z(): number {\n    return this.values[2];\n  }\n\n  set z(value: number) {\n    this.values[2] = value;\n  }\n\n  get w(): number {\n    return this.values[3];\n  }\n\n  set w(value: number) {\n    this.values[3] = value;\n  }\n\n  get xy(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n    ];\n  }\n\n  set xy(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n  }\n\n  get xyz(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n      this.values[2],\n    ];\n  }\n\n  set xyz(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n    this.values[2] = values[2];\n  }\n\n  get xyzw(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n      this.values[2],\n      this.values[3],\n    ];\n  }\n\n  set xyzw(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n    this.values[2] = values[2];\n    this.values[3] = values[3];\n  }\n\n  get r(): number {\n    return this.values[0];\n  }\n\n  set r(value: number) {\n    this.values[0] = value;\n  }\n\n  get g(): number {\n    return this.values[1];\n  }\n\n  set g(value: number) {\n    this.values[1] = value;\n  }\n\n  get b(): number {\n    return this.values[2];\n  }\n\n  set b(value: number) {\n    this.values[2] = value;\n  }\n\n  get a(): number {\n    return this.values[3];\n  }\n\n  set a(value: number) {\n    this.values[3] = value;\n  }\n\n  get rg(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n    ];\n  }\n\n  set rg(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n  }\n\n  get rgb(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n      this.values[2],\n    ];\n  }\n\n  set rgb(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n    this.values[2] = values[2];\n  }\n\n  get rgba(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n      this.values[2],\n      this.values[3],\n    ];\n  }\n\n  set rgba(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n    this.values[2] = values[2];\n    this.values[3] = values[3];\n  }\n\n  public static mix(vector: Vector4, vector2: Vector4, time: number,\n                    dest: Vector4 = null): Vector4 {\n    if (!dest) {\n      dest = new Vector4();\n    }\n\n    dest.x = vector.x + time * (vector2.x - vector.x);\n    dest.y = vector.y + time * (vector2.y - vector.y);\n    dest.z = vector.z + time * (vector2.z - vector.z);\n    dest.w = vector.w + time * (vector2.w - vector.w);\n\n    return dest;\n  }\n\n  public static sum(vector: Vector4, vector2: Vector4, dest: Vector4 = null): Vector4 {\n    if (!dest) {\n      dest = new Vector4();\n    }\n\n    dest.x = vector.x + vector2.x;\n    dest.y = vector.y + vector2.y;\n    dest.z = vector.z + vector2.z;\n    dest.w = vector.w + vector2.w;\n\n    return dest;\n  }\n\n  public static difference(vector: Vector4, vector2: Vector4, dest: Vector4 = null): Vector4 {\n    if (!dest) {\n      dest = new Vector4();\n    }\n\n    dest.x = vector.x - vector2.x;\n    dest.y = vector.y - vector2.y;\n    dest.z = vector.z - vector2.z;\n    dest.w = vector.w - vector2.w;\n\n    return dest;\n  }\n\n  public static product(vector: Vector4, vector2: Vector4, dest: Vector4 = null): Vector4 {\n    if (!dest) {\n      dest = new Vector4();\n    }\n\n    dest.x = vector.x * vector2.x;\n    dest.y = vector.y * vector2.y;\n    dest.z = vector.z * vector2.z;\n    dest.w = vector.w * vector2.w;\n\n    return dest;\n  }\n\n  public static quotient(vector: Vector4, vector2: Vector4, dest?: Vector4): Vector4 {\n    if (!dest) {\n      dest = new Vector4();\n    }\n\n    dest.x = vector.x / vector2.x;\n    dest.y = vector.y / vector2.y;\n    dest.z = vector.z / vector2.z;\n    dest.w = vector.w / vector2.w;\n\n    return dest;\n  }\n\n  public at(index: number): number {\n    return this.values[index];\n  }\n\n  public reset(): void {\n    this.x = 0;\n    this.y = 0;\n    this.z = 0;\n    this.w = 0;\n  }\n\n  public copy(dest: Vector4 = null): Vector4 {\n    if (!dest) {\n      return new Vector4(\n        this.values[0], this.values[1], this.values[2], this.values[3]\n      );\n    }\n\n    dest.values[0] = this.values[0];\n    dest.values[1] = this.values[1];\n    dest.values[2] = this.values[2];\n    dest.values[3] = this.values[3];\n\n    return dest;\n  }\n\n  public setValues(x: number, y: number, z: number, w: number) {\n    this.values[0] = x;\n    this.values[1] = y;\n    this.values[2] = z;\n    this.values[3] = w;\n\n    return this;\n  }\n\n  public setIdentity() {\n    this.values[0] = 0.0;\n    this.values[1] = 0.0;\n    this.values[2] = 0.0;\n    this.values[3] = 1.0;\n\n    return this;\n  }\n\n  public setFrom(other: Vector4) {\n    this.values[0] = other.values[0];\n    this.values[1] = other.values[1];\n    this.values[2] = other.values[2];\n    this.values[3] = other.values[3];\n\n    return this;\n  }\n\n  public splat(arg: number) {\n    this.values[0] = arg;\n    this.values[1] = arg;\n    this.values[2] = arg;\n    this.values[3] = arg;\n\n    return this;\n  }\n\n  public negate(dest: Vector4 = null): Vector4 {\n    if (!dest) {\n      dest = this;\n    }\n\n    dest.x = -this.x;\n    dest.y = -this.y;\n    dest.z = -this.z;\n    dest.w = -this.w;\n\n    return dest;\n  }\n\n  public exactEquals(vector: Vector4): boolean {\n    return this.x === vector.x &&\n      this.y === vector.y &&\n      this.z === vector.z &&\n      this.w === vector.w;\n  }\n\n  public equals(vector: Vector4, threshold = EPSILON): boolean {\n    if (Math.abs(this.x - vector.x) > threshold) {\n      return false;\n    }\n\n    if (Math.abs(this.y - vector.y) > threshold) {\n      return false;\n    }\n\n    if (Math.abs(this.z - vector.z) > threshold) {\n      return false;\n    }\n\n    if (Math.abs(this.w - vector.w) > threshold) {\n      return false;\n    }\n\n    return true;\n  }\n\n  public length(): number {\n    return Math.sqrt(this.squaredLength());\n  }\n\n  public squaredLength(): number {\n    const x = this.x,\n          y = this.y,\n          z = this.z,\n          w = this.w;\n\n    return (x * x + y * y + z * z + w * w);\n  }\n\n  public add(vector: Vector4): Vector4 {\n    this.x += vector.x;\n    this.y += vector.y;\n    this.z += vector.z;\n    this.w += vector.w;\n\n    return this;\n  }\n\n  public subtract(vector: Vector4): Vector4 {\n    this.x -= vector.x;\n    this.y -= vector.y;\n    this.z -= vector.z;\n    this.w -= vector.w;\n\n    return this;\n  }\n\n  public multiply(vector: Vector4): Vector4 {\n    this.x *= vector.x;\n    this.y *= vector.y;\n    this.z *= vector.z;\n    this.w *= vector.w;\n\n    return this;\n  }\n\n  public divide(vector: Vector4): Vector4 {\n    this.x /= vector.x;\n    this.y /= vector.y;\n    this.z /= vector.z;\n    this.w /= vector.w;\n\n    return this;\n  }\n\n  public ceil(): Vector4 {\n    this.x = Math.ceil(this.x);\n    this.y = Math.ceil(this.y);\n    this.z = Math.ceil(this.z);\n    this.w = Math.ceil(this.w);\n\n    return this;\n  }\n\n  public floor(): Vector4 {\n    this.x = Math.floor(this.x);\n    this.y = Math.floor(this.y);\n    this.z = Math.floor(this.z);\n    this.w = Math.floor(this.w);\n\n    return this;\n  }\n\n  public scale(value: number): Vector4 {\n    this.x *= value;\n    this.y *= value;\n    this.z *= value;\n    this.w *= value;\n\n    return this;\n  }\n\n  public normalize(): Vector4 {\n    let length = this.length();\n\n    if (length === 1) {\n      return this;\n    }\n\n    if (length === 0) {\n      this.values[0] *= 0;\n      this.values[1] *= 0;\n      this.values[2] *= 0;\n      this.values[3] *= 0;\n\n      return this;\n    }\n\n    length = 1.0 / length;\n\n    this.values[0] *= length;\n    this.values[1] *= length;\n    this.values[2] *= length;\n    this.values[3] *= length;\n\n    return this;\n  }\n\n  [Symbol.toPrimitive]() {\n    return [\n      this.values[0],\n      this.values[1],\n      this.values[2],\n      this.values[3],\n    ];\n  }\n\n  toArray() {\n    return this[Symbol.toPrimitive]();\n  }\n\n  toString() {\n    return `Vector4(${this.x}, ${this.y}, ${this.z}, ${this.w})`;\n  }\n}\n\nexport interface Vector4 {\n  sub(vector: Vector4): Vector4;\n\n  mul(vector: Vector4): Vector4;\n\n  div(vector: Vector4): Vector4;\n}\n\nVector4.prototype.sub = Vector4.prototype.subtract;\nVector4.prototype.mul = Vector4.prototype.multiply;\nVector4.prototype.div = Vector4.prototype.divide;\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { EPSILON } from './common';\nimport { Matrix3 } from './matrix3';\nimport { Matrix4 } from './matrix4';\nimport { Vector3 } from './vector3';\nimport { Vector4 } from './vector4';\n\nexport class Quaternion {\n  private values = new Float32Array(4);\n\n  constructor(values: number[] = null) {\n    if (values) {\n      this.xyzw = values;\n    }\n  }\n\n  get x(): number {\n    return this.values[0];\n  }\n\n  set x(value: number) {\n    this.values[0] = value;\n  }\n\n  get y(): number {\n    return this.values[1];\n  }\n\n  set y(value: number) {\n    this.values[1] = value;\n  }\n\n  get z(): number {\n    return this.values[2];\n  }\n\n  set z(value: number) {\n    this.values[2] = value;\n  }\n\n  get w(): number {\n    return this.values[3];\n  }\n\n  set w(value: number) {\n    this.values[3] = value;\n  }\n\n  get xy(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n    ];\n  }\n\n  set xy(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n  }\n\n  get xyz(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n      this.values[2],\n    ];\n  }\n\n  set xyz(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n    this.values[2] = values[2];\n  }\n\n  get xyzw(): number[] {\n    return [\n      this.values[0],\n      this.values[1],\n      this.values[2],\n      this.values[3],\n    ];\n  }\n\n  set xyzw(values: number[]) {\n    this.values[0] = values[0];\n    this.values[1] = values[1];\n    this.values[2] = values[2];\n    this.values[3] = values[3];\n  }\n\n  public static sum(q1: Quaternion, q2: Quaternion, out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    out.x = q1.x + q2.x;\n    out.y = q1.y + q2.y;\n    out.z = q1.z + q2.z;\n    out.w = q1.w + q2.w;\n\n    return out;\n  }\n\n  public static product(q1: Quaternion, q2: Quaternion, out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    const q1x = q1.x,\n          q1y = q1.y,\n          q1z = q1.z,\n          q1w = q1.w,\n\n          q2x = q2.x,\n          q2y = q2.y,\n          q2z = q2.z,\n          q2w = q2.w;\n\n    out.x = q1x * q2w + q1w * q2x + q1y * q2z - q1z * q2y;\n    out.y = q1y * q2w + q1w * q2y + q1z * q2x - q1x * q2z;\n    out.z = q1z * q2w + q1w * q2z + q1x * q2y - q1y * q2x;\n    out.w = q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z;\n\n    return out;\n  }\n\n  public static cross(q1: Quaternion, q2: Quaternion, out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    const q1x = q1.x,\n          q1y = q1.y,\n          q1z = q1.z,\n          q1w = q1.w,\n\n          q2x = q2.x,\n          q2y = q2.y,\n          q2z = q2.z,\n          q2w = q2.w;\n\n    out.x = q1w * q2z + q1z * q2w + q1x * q2y - q1y * q2x;\n    out.y = q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z;\n    out.z = q1w * q2x + q1x * q2w + q1y * q2z - q1z * q2y;\n    out.w = q1w * q2y + q1y * q2w + q1z * q2x - q1x * q2z;\n\n    return out;\n  }\n\n  public static shortMix(q1: Quaternion, q2: Quaternion, time: number,\n                         out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    if (time <= 0.0) {\n      out.xyzw = q1.xyzw;\n\n      return out;\n    } else if (time >= 1.0) {\n      out.xyzw = q2.xyzw;\n\n      return out;\n    }\n\n    let cos = Quaternion.dot(q1, q2),\n        q2a = q2.copy();\n\n    if (cos < 0.0) {\n      q2a.inverse();\n      cos = -cos;\n    }\n\n    let k0: number,\n        k1: number;\n\n    if (cos > 0.9999) {\n      k0 = 1 - time;\n      k1 = 0 + time;\n    } else {\n      const sin: number   = Math.sqrt(1 - cos * cos);\n      const angle: number = Math.atan2(sin, cos);\n\n      const oneOverSin: number = 1 / sin;\n\n      k0 = Math.sin((1 - time) * angle) * oneOverSin;\n      k1 = Math.sin((0 + time) * angle) * oneOverSin;\n    }\n\n    out.x = k0 * q1.x + k1 * q2a.x;\n    out.y = k0 * q1.y + k1 * q2a.y;\n    out.z = k0 * q1.z + k1 * q2a.z;\n    out.w = k0 * q1.w + k1 * q2a.w;\n\n    return out;\n  }\n\n  public static mix(q1: Quaternion, q2: Quaternion, time: number,\n                    out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    const cosHalfTheta = q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w;\n\n    if (Math.abs(cosHalfTheta) >= 1.0) {\n      out.xyzw = q1.xyzw;\n\n      return out;\n    }\n\n    const halfTheta    = Math.acos(cosHalfTheta),\n          sinHalfTheta = Math.sqrt(1.0 - cosHalfTheta * cosHalfTheta);\n\n    if (Math.abs(sinHalfTheta) < 0.001) {\n      out.x = q1.x * 0.5 + q2.x * 0.5;\n      out.y = q1.y * 0.5 + q2.y * 0.5;\n      out.z = q1.z * 0.5 + q2.z * 0.5;\n      out.w = q1.w * 0.5 + q2.w * 0.5;\n\n      return out;\n    }\n\n    const ratioA = Math.sin((1 - time) * halfTheta) / sinHalfTheta,\n          ratioB = Math.sin(time * halfTheta) / sinHalfTheta;\n\n    out.x = q1.x * ratioA + q2.x * ratioB;\n    out.y = q1.y * ratioA + q2.y * ratioB;\n    out.z = q1.z * ratioA + q2.z * ratioB;\n    out.w = q1.w * ratioA + q2.w * ratioB;\n\n    return out;\n  }\n\n  public static fromAxis(axis: Vector3, angle: number, out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    angle *= 0.5;\n    const sin = Math.sin(angle);\n\n    out.x = axis.x * sin;\n    out.y = axis.y * sin;\n    out.z = axis.z * sin;\n    out.w = Math.cos(angle);\n\n    return out;\n  }\n\n  public static dot(q1: Quaternion, q2: Quaternion): number {\n    return q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w;\n  }\n\n  public static lerp(a: Quaternion, b: Quaternion, t: number, result?: Quaternion) {\n    if (!result) {\n      result = new Quaternion();\n    }\n\n    const ax = a.x;\n    const ay = a.y;\n    const az = a.z;\n    const aw = a.w;\n\n    result.values[0] = ax + t * (b.x - ax);\n    result.values[1] = ay + t * (b.y - ay);\n    result.values[2] = az + t * (b.z - az);\n    result.values[3] = aw + t * (b.w - aw);\n    return result;\n  }\n\n  /**\n   * Performs a spherical linear interpolation between two quat\n   *\n   * @param  a the first operand\n   * @param  b the second operand\n   * @param  t interpolation amount between the two inputs\n   * @param  out the receiving Quaternion\n   * @returns   out\n   */\n  public static slerp(a: Quaternion, b: Quaternion, t: number, out: Quaternion = null) {\n    // benchmarks:\n    //    http://jsperf.com/quaternion-slerp-implementations\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    const ax = a.x;\n    const ay = a.y;\n    const az = a.z;\n    const aw = a.w;\n    let bx   = b.x;\n    let by   = b.y;\n    let bz   = b.z;\n    let bw   = b.w;\n\n    let omega;\n    let cosom;\n    let sinom;\n    let scale0;\n    let scale1;\n\n    // calc cosine\n    cosom = ax * bx + ay * by + az * bz + aw * bw;\n    // adjust signs (if necessary)\n    if (cosom < 0.0) {\n      cosom = -cosom;\n      bx    = -bx;\n      by    = -by;\n      bz    = -bz;\n      bw    = -bw;\n    }\n    // calculate coefficients\n    if (1.0 - cosom > 0.000001) {\n      // standard case (slerp)\n      omega  = Math.acos(cosom);\n      sinom  = Math.sin(omega);\n      scale0 = Math.sin((1.0 - t) * omega) / sinom;\n      scale1 = Math.sin(t * omega) / sinom;\n    } else {\n      // \"from\" and \"to\" quaternions are very close\n      //  ... so we can do a linear interpolation\n      scale0 = 1.0 - t;\n      scale1 = t;\n    }\n    // calculate final values\n    out.values[0] = scale0 * ax + scale1 * bx;\n    out.values[1] = scale0 * ay + scale1 * by;\n    out.values[2] = scale0 * az + scale1 * bz;\n    out.values[3] = scale0 * aw + scale1 * bw;\n\n    return out;\n  }\n\n  /**\n   * Performs a spherical linear interpolation with two control points\n   *\n   * @param  out the receiving Quaternion\n   * @param  a the first operand\n   * @param  b the second operand\n   * @param  c the third operand\n   * @param  d the fourth operand\n   * @param  t interpolation amount\n   * @returns   out\n   */\n  public static sqlerp(\n    a: Quaternion,\n    b: Quaternion,\n    c: Quaternion,\n    d: Quaternion,\n    t: number,\n    out: Quaternion = null\n  ) {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    const temp1 = new Quaternion();\n    const temp2 = new Quaternion();\n\n    Quaternion.slerp(a, d, t, temp1);\n    Quaternion.slerp(b, c, t, temp2);\n    Quaternion.slerp(temp1, temp2, 2 * t * (1 - t), out);\n\n    return out;\n  }\n\n  /**\n   * Creates a Quaternion from the given 3x3 rotation matrix.\n   *\n   * NOTE: The resultant Quaternion is not normalized, so you should be sure\n   * to renormalize the Quaternion yourself where necessary.\n   *\n   * @param  out the receiving Quaternion\n   * @param  m rotation matrix\n   * @returns   out\n   */\n  public static fromMatrix3(m: Matrix3, out?: Quaternion) {\n    // Algorithm in Ken Shoemake's article in 1987 SIGGRAPH course notes\n    // article \"Quaternion Calculus and Fast Animation\".\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    const fTrace = m.at(0) + m.at(4) + m.at(8);\n    let fRoot;\n\n    if (fTrace > 0.0) {\n      // |w| > 1/2, may as well choose w > 1/2\n      fRoot         = Math.sqrt(fTrace + 1.0); // 2w\n      out.values[3] = 0.5 * fRoot;\n      fRoot         = 0.5 / fRoot; // 1/(4w)\n      out.values[0] = (m.at(5) - m.at(7)) * fRoot;\n      out.values[1] = (m.at(6) - m.at(2)) * fRoot;\n      out.values[2] = (m.at(1) - m.at(3)) * fRoot;\n    } else {\n      // |w| <= 1/2\n      let i = 0;\n      if (m.at(4) > m.at(0)) {\n        i = 1;\n      }\n      if (m.at(8) > m.at(i * 3 + i)) {\n        i = 2;\n      }\n      const j = (i + 1) % 3;\n      const k = (i + 2) % 3;\n\n      fRoot         = Math.sqrt(m.at(i * 3 + i) - m.at(j * 3 + j) - m.at(k * 3 + k) + 1.0);\n      out.values[i] = 0.5 * fRoot;\n      fRoot         = 0.5 / fRoot;\n      out.values[3] = (m.at(j * 3 + k) - m.at(k * 3 + j)) * fRoot;\n      out.values[j] = (m.at(j * 3 + i) + m.at(i * 3 + j)) * fRoot;\n      out.values[k] = (m.at(k * 3 + i) + m.at(i * 3 + k)) * fRoot;\n    }\n\n    return out;\n  }\n\n  public at(index: number): number {\n    return this.values[index];\n  }\n\n  public reset(): void {\n    for (let i = 0; i < 4; i++) {\n      this.values[i] = 0;\n    }\n  }\n\n  public copy(out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = new Quaternion();\n    }\n\n    for (let i = 0; i < 4; i++) {\n      out.values[i] = this.values[i];\n    }\n\n    return out;\n  }\n\n  public roll(): number {\n    const x = this.x,\n          y = this.y,\n          z = this.z,\n          w = this.w;\n\n    return Math.atan2(2.0 * (x * y + w * z), w * w + x * x - y * y - z * z);\n  }\n\n  public pitch(): number {\n    const x = this.x,\n          y = this.y,\n          z = this.z,\n          w = this.w;\n\n    return Math.atan2(2.0 * (y * z + w * x), w * w - x * x - y * y + z * z);\n  }\n\n  public yaw(): number {\n    return Math.asin(2.0 * (this.x * this.z - this.w * this.y));\n  }\n\n  public equals(vector: Quaternion, threshold = EPSILON): boolean {\n    for (let i = 0; i < 4; i++) {\n      if (Math.abs(this.values[i] - vector.at(i)) > threshold) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  public identity(): Quaternion {\n    this.x = 0;\n    this.y = 0;\n    this.z = 0;\n    this.w = 1;\n\n    return this;\n  }\n\n  public inverse(): Quaternion {\n    const dot = Quaternion.dot(this, this);\n\n    if (!dot) {\n      this.xyzw = [0, 0, 0, 0];\n\n      return this;\n    }\n\n    const invDot = dot ? 1.0 / dot : 0;\n\n    this.x *= -invDot;\n    this.y *= -invDot;\n    this.z *= -invDot;\n    this.w *= invDot;\n\n    return this;\n  }\n\n  public conjugate(): Quaternion {\n    this.values[0] *= -1;\n    this.values[1] *= -1;\n    this.values[2] *= -1;\n\n    return this;\n  }\n\n  public length(): number {\n    const x = this.x,\n          y = this.y,\n          z = this.z,\n          w = this.w;\n\n    return Math.sqrt(x * x + y * y + z * z + w * w);\n  }\n\n  public normalize(out: Quaternion = null): Quaternion {\n    if (!out) {\n      out = this;\n    }\n\n    const x = this.x,\n          y = this.y,\n          z = this.z,\n          w = this.w;\n\n    let length = Math.sqrt(x * x + y * y + z * z + w * w);\n\n    if (!length) {\n      out.x = 0;\n      out.y = 0;\n      out.z = 0;\n      out.w = 0;\n\n      return out;\n    }\n\n    length = 1 / length;\n\n    out.x = x * length;\n    out.y = y * length;\n    out.z = z * length;\n    out.w = w * length;\n\n    return out;\n  }\n\n  public add(other: Quaternion): Quaternion {\n    for (let i = 0; i < 4; i++) {\n      this.values[i] += other.at(i);\n    }\n\n    return this;\n  }\n\n  /**\n   * Multiplies with another {@class Quaternion}\n   *\n   * @param  other\n   * @returns\n   */\n  public multiply(other: Quaternion): Quaternion {\n    const q1x = this.x,\n          q1y = this.y,\n          q1z = this.z,\n          q1w = this.w;\n\n    const q2x = other.x,\n          q2y = other.y,\n          q2z = other.z,\n          q2w = other.w;\n\n    this.x = q1x * q2w + q1w * q2x + q1y * q2z - q1z * q2y;\n    this.y = q1y * q2w + q1w * q2y + q1z * q2x - q1x * q2z;\n    this.z = q1z * q2w + q1w * q2z + q1x * q2y - q1y * q2x;\n    this.w = q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z;\n\n    return this;\n  }\n\n  // /**\n  //  * Sets a Quaternion to represent the shortest rotation from one\n  //  * vector to another.\n  //  *\n  //  * Both vectors are assumed to be unit length.\n  //  *\n  //  * @param  out the receiving Quaternion.\n  //  * @param  a the initial vector\n  //  * @param  b the outination vector\n  //  * @returns   out\n  //  */\n  // public static rotationTo(a: Vector3, b: Vector3, out: Quaternion = null) {\n  //   if (!out) {\n  //     out = new Quaternion();\n  //   }\n  //\n  //   const tmpvec3   = new Vector3();\n  //   const xUnitVec3 = new Vector3([1, 0, 0]);\n  //   const yUnitVec3 = new Vector3([0, 1, 0]);\n  //\n  //   const d = Vector3.dot(a, b);\n  //   if (d < -0.999999) {\n  //     Vector3.cross(xUnitVec3, a, tmpvec3);\n  //     if (tmpvec3.length < 0.000001) {\n  //       Vector3.cross(yUnitVec3, a, tmpvec3);\n  //     }\n  //     tmpvec3.normalize();\n  //     out.setAxisAngle(tmpvec3, Math.PI);\n  //     return out;\n  //   } else if (d > 0.999999) {\n  //     out[0] = 0;\n  //     out[1] = 0;\n  //     out[2] = 0;\n  //     out[3] = 1;\n  //     return out;\n  //   } else {\n  //     Vector3.cross(a, b, tmpvec3);\n  //     out[0] = tmpvec3[0];\n  //     out[1] = tmpvec3[1];\n  //     out[2] = tmpvec3[2];\n  //     out[3] = 1 + d;\n  //     return out.normalize();\n  //   }\n  // }\n\n  public multiplyVector3(vector: Vector3, out: Vector3 = null): Vector3 {\n    if (!out) {\n      out = new Vector3();\n    }\n\n    const x = vector.x,\n          y = vector.y,\n          z = vector.z;\n\n    const qx = this.x,\n          qy = this.y,\n          qz = this.z,\n          qw = this.w;\n\n    const ix = qw * x + qy * z - qz * y,\n          iy = qw * y + qz * x - qx * z,\n          iz = qw * z + qx * y - qy * x,\n          iw = -qx * x - qy * y - qz * z;\n\n    out.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n    out.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n    out.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\n    return out;\n  }\n\n  /**\n   * Rotates a Quaternion by the given angle about the X axis\n   *\n   * @param  rad\n   */\n  public rotateX(rad: number) {\n    rad *= 0.5;\n\n    const ax = this.x;\n    const ay = this.y;\n    const az = this.z;\n    const aw = this.w;\n    const bx = Math.sin(rad);\n    const bw = Math.cos(rad);\n\n    this.x = ax * bw + aw * bx;\n    this.y = ay * bw + az * bx;\n    this.z = az * bw - ay * bx;\n    this.w = aw * bw - ax * bx;\n    return this;\n  }\n\n  /**\n   * Rotates a Quaternion by the given angle about the Y axis\n   *\n   * @param  rad angle (in radians) to rotate\n   * @returns   out\n   */\n  public rotateY(rad: number) {\n    rad *= 0.5;\n\n    const ax = this.x;\n    const ay = this.y;\n    const az = this.z;\n    const aw = this.w;\n    const by = Math.sin(rad);\n    const bw = Math.cos(rad);\n\n    this.x = ax * bw - az * by;\n    this.y = ay * bw + aw * by;\n    this.z = az * bw + ax * by;\n    this.w = aw * bw - ay * by;\n    return this;\n  }\n\n  /**\n   * Rotates a Quaternion by the given angle about the Z axis\n   *\n   * @param  rad angle (in radians) to rotate\n   * @returns\n   */\n  public rotateZ(rad: number) {\n    rad *= 0.5;\n\n    const ax = this.x;\n    const ay = this.y;\n    const az = this.z;\n    const aw = this.w;\n    const bz = Math.sin(rad);\n    const bw = Math.cos(rad);\n\n    this.x = ax * bw + ay * bz;\n    this.y = ay * bw - ax * bz;\n    this.z = az * bw + aw * bz;\n    this.w = aw * bw - az * bz;\n    return this;\n  }\n\n  /**\n   * Calculates the W component of a quat from the X, Y, and Z components.\n   * Assumes that Quaternion is 1 unit in length.\n   * Any existing W component will be ignored.\n   *\n   * @returns\n   */\n  public calculateW(a: Quaternion) {\n    const x = this.x;\n    const y = this.y;\n    const z = this.z;\n\n    this.w = Math.sqrt(Math.abs(1.0 - x * x - y * y - z * z));\n    return this;\n  }\n\n  public toMatrix3(out: Matrix3 = null): Matrix3 {\n    if (!out) {\n      out = new Matrix3();\n    }\n\n    const x = this.x,\n          y = this.y,\n          z = this.z,\n          w = this.w;\n\n    const x2 = x + x,\n          y2 = y + y,\n          z2 = z + z;\n\n    const xx = x * x2,\n          xy = x * y2,\n          xz = x * z2,\n          yy = y * y2,\n          yz = y * z2,\n          zz = z * z2,\n          wx = w * x2,\n          wy = w * y2,\n          wz = w * z2;\n\n    out.init([\n      1 - (yy + zz),\n      xy + wz,\n      xz - wy,\n\n      xy - wz,\n      1 - (xx + zz),\n      yz + wx,\n\n      xz + wy,\n      yz - wx,\n      1 - (xx + yy),\n    ]);\n\n    return out;\n  }\n\n  public toMatrix4(out: Matrix4 = null): Matrix4 {\n    if (!out) {\n      out = new Matrix4();\n    }\n\n    const x  = this.x,\n          y  = this.y,\n          z  = this.z,\n          w  = this.w,\n\n          x2 = x + x,\n          y2 = y + y,\n          z2 = z + z,\n\n          xx = x * x2,\n          xy = x * y2,\n          xz = x * z2,\n          yy = y * y2,\n          yz = y * z2,\n          zz = z * z2,\n          wx = w * x2,\n          wy = w * y2,\n          wz = w * z2;\n\n    out.init([\n      1 - (yy + zz),\n      xy + wz,\n      xz - wy,\n      0,\n\n      xy - wz,\n      1 - (xx + zz),\n      yz + wx,\n      0,\n\n      xz + wy,\n      yz - wx,\n      1 - (xx + yy),\n      0,\n\n      0,\n      0,\n      0,\n      1,\n    ]);\n\n    return out;\n  }\n\n  /**\n   * Sets the specified Quaternion with values corresponding to the given\n   * axes. Each axis is a Vector3 and is expected to be unit length and\n   * perpendicular to all other specified axes.\n   *\n   * @param  view  the vector representing the viewing direction\n   * @param  right the vector representing the local \"right\" direction\n   * @param  up    the vector representing the local \"up\" direction\n   * @returns   out\n   */\n  public setAxes(\n    view: Vector3,\n    right: Vector3,\n    up: Vector3\n  ): Quaternion {\n    const out = new Matrix3(\n      right.x, up.x, -view.x,\n      right.y, up.y, -view.y,\n      right.z, up.z, -view.z\n    );\n\n    return Quaternion.fromMatrix3(out, this).normalize();\n  }\n\n  /**\n   * Sets a quat from the given angle and rotation axis,\n   * then returns it.\n   *\n   * @param  axis the axis around which to rotate\n   * @param  rad the angle in radians\n   * @returns\n   */\n  public setAxisAngle(axis: Vector3, rad: number) {\n    rad            = rad * 0.5;\n    const s        = Math.sin(rad);\n    this.values[0] = s * axis.x;\n    this.values[1] = s * axis.y;\n    this.values[2] = s * axis.z;\n    this.values[3] = Math.cos(rad);\n    return this;\n  }\n\n  /**\n   * Gets the rotation axis and angle for a given\n   *  Quaternion. If a Quaternion is created with\n   *  setAxisAngle, this method will return the same\n   *  values as providied in the original parameter list\n   *  OR functionally equivalent values.\n   * Example: The Quaternion formed by axis [0, 0, 1] and\n   *  angle -90 is the same as the Quaternion formed by\n   *  [0, 0, 1] and 270. This method favors the latter.\n   * @return\n   */\n  public getAxisAngle() {\n    const rad = Math.acos(this.w) * 2.0;\n    const s   = Math.sin(rad / 2.0);\n    if (s !== 0.0) {\n      return new Vector4([\n        this.x / s,\n        this.y / s,\n        this.z / s,\n        rad,\n      ]);\n    } else {\n      // If s is zero, return any axis (no rotation - axis does not matter)\n      return new Vector4([\n        1, 0, 0, rad,\n      ]);\n    }\n  }\n\n  public clone() {\n    return this.copy();\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { EPSILON } from './common';\nimport { Matrix3 } from './matrix3';\nimport { Quaternion } from './quaternion';\nimport { Vector3 } from './vector3';\nimport { Vector4 } from './vector4';\n\nexport class Matrix4 {\n  public static readonly dimension = 4;\n  // tslint:disable-next-line\n  public transform                 = this.transformVector4;\n  // tslint:disable-next-line\n  public transform3                = this.transformVector3;\n  // tslint:disable-next-line\n  public rotate3                   = this.rotateVector3;\n  private values                   = new Float32Array(16);\n\n  constructor(values?: number[]);\n\n  constructor(a11: number, a12: number, a13: number, a14: number,\n              a21: number, a22: number, a23: number, a24: number,\n              a31: number, a32: number, a33: number, a34: number,\n              a41: number, a42: number, a43: number, a44: number);\n\n  constructor(a11?: number | number[], a12?: number, a13?: number, a14?: number,\n              a21?: number, a22?: number, a23?: number, a24?: number,\n              a31?: number, a32?: number, a33?: number, a34?: number,\n              a41?: number, a42?: number, a43?: number, a44?: number) {\n    if (arguments.length === 1) {\n      if (a11) {\n        this.init(a11 as number[]);\n      }\n    } else if (arguments.length === 16) {\n      this.values[0] = a11 as number;\n      this.values[1] = a12;\n      this.values[2] = a13;\n      this.values[3] = a14;\n\n      this.values[4] = a21;\n      this.values[5] = a22;\n      this.values[6] = a23;\n      this.values[7] = a24;\n\n      this.values[8]  = a31;\n      this.values[9]  = a32;\n      this.values[10] = a33;\n      this.values[11] = a34;\n\n      this.values[12] = a41;\n      this.values[13] = a42;\n      this.values[14] = a43;\n      this.values[15] = a44;\n    } else {\n      this.values[0]  = this.values[1] = this.values[2] = this.values[3] = 0;\n      this.values[4]  = this.values[5] = this.values[6] = this.values[7] = 0;\n      this.values[8]  = this.values[9] = this.values[10] = this.values[11] = 0;\n      this.values[12] = this.values[13] = this.values[14] = this.values[15] = 0;\n    }\n  }\n\n  public static zero(): Matrix4 {\n    return new Matrix4(\n      0, 0, 0, 0,\n      0, 0, 0, 0,\n      0, 0, 0, 0,\n      0, 0, 0, 0\n    );\n  }\n\n  /**\n   * Creates a matrix from a vector translation\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4\n   *     .setIdentity()\n   *     .translate(vec);\n   *\n   * @param  v\n   * @returns\n   */\n  public static fromTranslation(v: Vector3) {\n    return new Matrix4(\n      1,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n      v.x,\n      v.y,\n      v.z,\n      1,\n    );\n  }\n\n  /**\n   * Creates a matrix from a vector scaling\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4\n   *     .setIdentity()\n   *     .scale(vec);\n   *\n   * @param  v\n   * @returns\n   */\n  public static fromScaling(v: Vector3) {\n    return new Matrix4(\n      v.x,\n      0,\n      0,\n      0,\n      0,\n      v.y,\n      0,\n      0,\n      0,\n      0,\n      v.z,\n      0,\n      0,\n      0,\n      0,\n      1\n    );\n  }\n\n  /**\n   * Creates a matrix from a given angle around a given axis\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4\n   *     .setIdentity()\n   *     .rotate(rad, axis);\n   *\n   * @param  rad\n   * @param  axis\n   * @returns\n   */\n  public static fromRotation(rad: number, axis: Vector3) {\n    const out = new Matrix4();\n\n    let x   = axis.x;\n    let y   = axis.y;\n    let z   = axis.z;\n    let len = Math.sqrt(x * x + y * y + z * z);\n    let s;\n    let c;\n    let t;\n\n    if (Math.abs(len) < EPSILON) {\n      return null;\n    }\n\n    len = 1 / len;\n    x *= len;\n    y *= len;\n    z *= len;\n\n    s = Math.sin(rad);\n    c = Math.cos(rad);\n    t = 1 - c;\n\n    // Perform rotation-specific matrix multiplication\n    out.values[0]  = x * x * t + c;\n    out.values[1]  = y * x * t + z * s;\n    out.values[2]  = z * x * t - y * s;\n    out.values[3]  = 0;\n    out.values[4]  = x * y * t - z * s;\n    out.values[5]  = y * y * t + c;\n    out.values[6]  = z * y * t + x * s;\n    out.values[7]  = 0;\n    out.values[8]  = x * z * t + y * s;\n    out.values[9]  = y * z * t - x * s;\n    out.values[10] = z * z * t + c;\n    out.values[11] = 0;\n    out.values[12] = 0;\n    out.values[13] = 0;\n    out.values[14] = 0;\n    out.values[15] = 1;\n    return out;\n  }\n\n  /**\n   * Creates a matrix from the given angle around the X axis\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4\n   *     .setIdentity()\n   *     .rotateX(rad);\n   *\n   * @param  rad\n   * @returns\n   */\n  public static fromXRotation(rad: number) {\n    const out = new Matrix4();\n\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n\n    // Perform axis-specific matrix multiplication\n    out.values[0]  = 1;\n    out.values[1]  = 0;\n    out.values[2]  = 0;\n    out.values[3]  = 0;\n    out.values[4]  = 0;\n    out.values[5]  = c;\n    out.values[6]  = s;\n    out.values[7]  = 0;\n    out.values[8]  = 0;\n    out.values[9]  = -s;\n    out.values[10] = c;\n    out.values[11] = 0;\n    out.values[12] = 0;\n    out.values[13] = 0;\n    out.values[14] = 0;\n    out.values[15] = 1;\n    return out;\n  }\n\n  /**\n   * Creates a matrix from the given angle around the Y axis\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4\n   *     .setIdentity()\n   *     .rotateY(rad);\n   *\n   * @param  rad the angle to rotate the matrix by\n   * @returns   out\n   */\n  public static fromYRotation(rad: number) {\n    const out = new Matrix4();\n\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n\n    // Perform axis-specific matrix multiplication\n    out.values[0]  = c;\n    out.values[1]  = 0;\n    out.values[2]  = -s;\n    out.values[3]  = 0;\n    out.values[4]  = 0;\n    out.values[5]  = 1;\n    out.values[6]  = 0;\n    out.values[7]  = 0;\n    out.values[8]  = s;\n    out.values[9]  = 0;\n    out.values[10] = c;\n    out.values[11] = 0;\n    out.values[12] = 0;\n    out.values[13] = 0;\n    out.values[14] = 0;\n    out.values[15] = 1;\n    return out;\n  }\n\n  /**\n   * Creates a matrix from the given angle around the Z axis\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4\n   *     .setIdentity()\n   *     .rotateZ(rad);\n   *\n   * @param  rad the angle to rotate the matrix by\n   * @returns   out\n   */\n  public static fromZRotation(rad: number) {\n    const out = new Matrix4();\n\n    const s = Math.sin(rad);\n    const c = Math.cos(rad);\n\n    // Perform axis-specific matrix multiplication\n    out.values[0]  = c;\n    out.values[1]  = s;\n    out.values[2]  = 0;\n    out.values[3]  = 0;\n    out.values[4]  = -s;\n    out.values[5]  = c;\n    out.values[6]  = 0;\n    out.values[7]  = 0;\n    out.values[8]  = 0;\n    out.values[9]  = 0;\n    out.values[10] = 1;\n    out.values[11] = 0;\n    out.values[12] = 0;\n    out.values[13] = 0;\n    out.values[14] = 0;\n    out.values[15] = 1;\n    return out;\n  }\n\n  /**\n   * Creates a matrix from a Quaternion rotation and vector translation\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4\n   *     .setIdentity()\n   *     .translate(vec);\n   *\n   *     var quatMat = mat4\n   *     .create()\n   *     .toMat4(quat, quatMat);\n   *\n   *     mat4.multiply(dest, quatMat);\n   *\n   * @param  q Rotation Quaternion\n   * @param  v Translation vector\n   * @returns   out\n   */\n  public static fromRotationTranslation(\n    q: Quaternion,\n    v: Vector3\n  ) {\n    const out = new Matrix4();\n\n    // Quaternion math\n    const x  = q.x;\n    const y  = q.y;\n    const z  = q.z;\n    const w  = q.w;\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const xy = x * y2;\n    const xz = x * z2;\n    const yy = y * y2;\n    const yz = y * z2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n\n    out.values[0]  = 1 - (yy + zz);\n    out.values[1]  = xy + wz;\n    out.values[2]  = xz - wy;\n    out.values[3]  = 0;\n    out.values[4]  = xy - wz;\n    out.values[5]  = 1 - (xx + zz);\n    out.values[6]  = yz + wx;\n    out.values[7]  = 0;\n    out.values[8]  = xz + wy;\n    out.values[9]  = yz - wx;\n    out.values[10] = 1 - (xx + yy);\n    out.values[11] = 0;\n    out.values[12] = v.x;\n    out.values[13] = v.y;\n    out.values[14] = v.z;\n    out.values[15] = 1;\n\n    return out;\n  }\n\n  /**\n   * Creates a matrix from a Quaternion rotation, vector translation and vector scale\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4.setIdentity(dest);\n   *     mat4.translate(dest, vec);\n   *     var quatMat = mat4.create();\n   *     quat4.toMat4(quat, quatMat);\n   *     mat4.multiply(dest, quatMat);\n   *     mat4.scale(dest, scale)\n   *\n   * @param  q Rotation Quaternion\n   * @param  v Translation vector\n   * @param  s Scaling vector\n   * @returns   out\n   */\n  public static fromRotationTranslationScale(\n    q: Quaternion,\n    v: Vector3,\n    s: Vector3\n  ) {\n    const out = new Matrix4();\n\n    // Quaternion math\n    const x  = q.x;\n    const y  = q.y;\n    const z  = q.z;\n    const w  = q.w;\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const xy = x * y2;\n    const xz = x * z2;\n    const yy = y * y2;\n    const yz = y * z2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n    const sx = s.x;\n    const sy = s.y;\n    const sz = s.z;\n\n    out.values[0]  = (1 - (yy + zz)) * sx;\n    out.values[1]  = (xy + wz) * sx;\n    out.values[2]  = (xz - wy) * sx;\n    out.values[3]  = 0;\n    out.values[4]  = (xy - wz) * sy;\n    out.values[5]  = (1 - (xx + zz)) * sy;\n    out.values[6]  = (yz + wx) * sy;\n    out.values[7]  = 0;\n    out.values[8]  = (xz + wy) * sz;\n    out.values[9]  = (yz - wx) * sz;\n    out.values[10] = (1 - (xx + yy)) * sz;\n    out.values[11] = 0;\n    out.values[12] = v.x;\n    out.values[13] = v.y;\n    out.values[14] = v.z;\n    out.values[15] = 1;\n\n    return out;\n  }\n\n  /**\n   * Creates a matrix from a Quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n   * This is equivalent to (but much faster than):\n   *\n   *     mat4.setIdentity(dest);\n   *     mat4.translate(dest, vec);\n   *     mat4.translate(dest, origin);\n   *     var quatMat = mat4.create();\n   *     quat4.toMat4(quat, quatMat);\n   *     mat4.multiply(dest, quatMat);\n   *     mat4.scale(dest, scale)\n   *     mat4.translate(dest, negativeOrigin);\n   *\n   * @param  q Rotation Quaternion\n   * @param  v Translation vector\n   * @param  s Scaling vector\n   * @param  o The origin vector around which to scale and rotate\n   * @returns   out\n   */\n  public static fromRotationTranslationScaleOrigin(\n    q: Quaternion,\n    v: Vector3,\n    s: Vector3,\n    o: Vector3\n  ) {\n\n    // Quaternion math\n    const x  = q.x;\n    const y  = q.y;\n    const z  = q.z;\n    const w  = q.w;\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const xy = x * y2;\n    const xz = x * z2;\n    const yy = y * y2;\n    const yz = y * z2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n    const sx = s.x;\n    const sy = s.y;\n    const sz = s.z;\n    const ox = o.x;\n    const oy = o.y;\n    const oz = o.z;\n\n    const out0  = (1 - (yy + zz)) * sx;\n    const out1  = (xy + wz) * sx;\n    const out2  = (xz - wy) * sx;\n    const out3  = 0;\n    const out4  = (xy - wz) * sy;\n    const out5  = (1 - (xx + zz)) * sy;\n    const out6  = (yz + wx) * sy;\n    const out7  = 0;\n    const out8  = (xz + wy) * sz;\n    const out9  = (yz - wx) * sz;\n    const out10 = (1 - (xx + yy)) * sz;\n    const out11 = 0;\n    const out12 = v.x + ox - (out0 * ox + out4 * oy + out8 * oz);\n    const out13 = v.y + oy - (out1 * ox + out5 * oy + out9 * oz);\n    const out14 = v.z + oz - (out2 * ox + out6 * oy + out10 * oz);\n    const out15 = 1;\n\n    return new Matrix4(\n      out0,\n      out1,\n      out2,\n      out3,\n      out4,\n      out5,\n      out6,\n      out7,\n      out8,\n      out9,\n      out10,\n      out11,\n      out12,\n      out13,\n      out14,\n      out15,\n    );\n  }\n\n  /**\n   * Calculates a 4x4 matrix from the given Quaternion\n   *\n   * @param  q Quaternion to create matrix from\n   *\n   * @returns   out\n   */\n  public static fromQuat(q: Quaternion) {\n    const out = new Matrix4();\n\n    const x  = q.x;\n    const y  = q.y;\n    const z  = q.z;\n    const w  = q.w;\n    const x2 = x + x;\n    const y2 = y + y;\n    const z2 = z + z;\n    const xx = x * x2;\n    const yx = y * x2;\n    const yy = y * y2;\n    const zx = z * x2;\n    const zy = z * y2;\n    const zz = z * z2;\n    const wx = w * x2;\n    const wy = w * y2;\n    const wz = w * z2;\n\n    out.values[0] = 1 - yy - zz;\n    out.values[1] = yx + wz;\n    out.values[2] = zx - wy;\n    out.values[3] = 0;\n\n    out.values[4] = yx - wz;\n    out.values[5] = 1 - xx - zz;\n    out.values[6] = zy + wx;\n    out.values[7] = 0;\n\n    out.values[8]  = zx + wy;\n    out.values[9]  = zy - wx;\n    out.values[10] = 1 - xx - yy;\n    out.values[11] = 0;\n\n    out.values[12] = 0;\n    out.values[13] = 0;\n    out.values[14] = 0;\n    out.values[15] = 1;\n\n    return out;\n  }\n\n  public static frustum(left: number, right: number, bottom: number, top: number, near: number,\n                        far: number): Matrix4 {\n    const rl = (right - left);\n    const tb = (top - bottom);\n    const fn = (far - near);\n\n    return new Matrix4([\n      (near * 2) / rl,\n      0,\n      0,\n      0,\n\n      0,\n      (near * 2) / tb,\n      0,\n      0,\n\n      (right + left) / rl,\n      (top + bottom) / tb,\n      -(far + near) / fn,\n      -1,\n\n      0,\n      0,\n      -(far * near * 2) / fn,\n      0,\n    ]);\n  }\n\n  public static perspective(fov: number, aspect: number, near: number, far: number): Matrix4 {\n    const top   = near * Math.tan(fov * Math.PI / 360.0);\n    const right = top * aspect;\n\n    return Matrix4.frustum(-right, right, -top, top, near, far);\n  }\n\n  /**\n   * Generates a perspective projection matrix with the given field of view.\n   * This is primarily useful for generating projection matrices to be used\n   * with the still experiemental WebVR API.\n   *\n   * @param  fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n   * @param  near Near bound of the frustum\n   * @param  far Far bound of the frustum\n   * @returns   out\n   */\n  public static perspectiveFromFieldOfView(\n    fov: {\n      upDegrees: number\n      downDegrees: number\n      leftDegrees: number\n      rightDegrees: number,\n    },\n    near: number,\n    far: number\n  ) {\n    const upTan    = Math.tan(fov.upDegrees * Math.PI / 180.0);\n    const downTan  = Math.tan(fov.downDegrees * Math.PI / 180.0);\n    const leftTan  = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n    const rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n    const xScale   = 2.0 / (leftTan + rightTan);\n    const yScale   = 2.0 / (upTan + downTan);\n\n    return new Matrix4(\n      [\n        xScale,\n        0.0,\n        0.0,\n        0.0,\n        0.0,\n        yScale,\n        0.0,\n        0.0,\n        -((leftTan - rightTan) * xScale * 0.5),\n        (upTan - downTan) * yScale * 0.5,\n        far / (near - far),\n        -1.0,\n        0.0,\n        0.0,\n        far * near / (near - far),\n        0.0,\n      ]\n    );\n  }\n\n  public static orthographic(left: number, right: number, bottom: number, top: number, near: number,\n                             far: number): Matrix4 {\n    const rl = (right - left);\n    const tb = (top - bottom);\n    const fn = (far - near);\n\n    return new Matrix4([\n      2 / rl,\n      0,\n      0,\n      0,\n\n      0,\n      2 / tb,\n      0,\n      0,\n\n      0,\n      0,\n      -2 / fn,\n      0,\n\n      -(left + right) / rl,\n      -(top + bottom) / tb,\n      -(far + near) / fn,\n      1,\n    ]);\n  }\n\n  public static lookAt(position: Vector3, target: Vector3, up: Vector3 = Vector3.up): Matrix4 {\n    if (position.equals(target)) {\n      return new Matrix4().setIdentity();\n    }\n\n    const z = Vector3.difference(position, target).normalize();\n\n    const x = up.clone().cross(z).normalize();\n    const y = z.clone().cross(x).normalize();\n\n    return new Matrix4([\n      x.x,\n      y.x,\n      z.x,\n      0,\n\n      x.y,\n      y.y,\n      z.y,\n      0,\n\n      x.z,\n      y.z,\n      z.z,\n      0,\n\n      -Vector3.dot(x, position),\n      -Vector3.dot(y, position),\n      -Vector3.dot(z, position),\n      1,\n    ]);\n  }\n\n  public static product(m1: Matrix4, m2: Matrix4, result: Matrix4 = null): Matrix4 {\n    const a00 = m1.at(0);\n    const a01 = m1.at(1);\n    const a02 = m1.at(2);\n    const a03 = m1.at(3);\n    const a10 = m1.at(4);\n    const a11 = m1.at(5);\n    const a12 = m1.at(6);\n    const a13 = m1.at(7);\n    const a20 = m1.at(8);\n    const a21 = m1.at(9);\n    const a22 = m1.at(10);\n    const a23 = m1.at(11);\n    const a30 = m1.at(12);\n    const a31 = m1.at(13);\n    const a32 = m1.at(14);\n    const a33 = m1.at(15);\n\n    const b00 = m2.at(0);\n    const b01 = m2.at(1);\n    const b02 = m2.at(2);\n    const b03 = m2.at(3);\n    const b10 = m2.at(4);\n    const b11 = m2.at(5);\n    const b12 = m2.at(6);\n    const b13 = m2.at(7);\n    const b20 = m2.at(8);\n    const b21 = m2.at(9);\n    const b22 = m2.at(10);\n    const b23 = m2.at(11);\n    const b30 = m2.at(12);\n    const b31 = m2.at(13);\n    const b32 = m2.at(14);\n    const b33 = m2.at(15);\n\n    if (result) {\n      result.init([\n        b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30,\n        b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31,\n        b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32,\n        b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33,\n\n        b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30,\n        b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31,\n        b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32,\n        b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33,\n\n        b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30,\n        b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31,\n        b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32,\n        b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33,\n\n        b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30,\n        b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31,\n        b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32,\n        b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33,\n      ]);\n\n      return result;\n    } else {\n      return new Matrix4([\n        b00 * a00 + b01 * a10 + b02 * a20 + b03 * a30,\n        b00 * a01 + b01 * a11 + b02 * a21 + b03 * a31,\n        b00 * a02 + b01 * a12 + b02 * a22 + b03 * a32,\n        b00 * a03 + b01 * a13 + b02 * a23 + b03 * a33,\n\n        b10 * a00 + b11 * a10 + b12 * a20 + b13 * a30,\n        b10 * a01 + b11 * a11 + b12 * a21 + b13 * a31,\n        b10 * a02 + b11 * a12 + b12 * a22 + b13 * a32,\n        b10 * a03 + b11 * a13 + b12 * a23 + b13 * a33,\n\n        b20 * a00 + b21 * a10 + b22 * a20 + b23 * a30,\n        b20 * a01 + b21 * a11 + b22 * a21 + b23 * a31,\n        b20 * a02 + b21 * a12 + b22 * a22 + b23 * a32,\n        b20 * a03 + b21 * a13 + b22 * a23 + b23 * a33,\n\n        b30 * a00 + b31 * a10 + b32 * a20 + b33 * a30,\n        b30 * a01 + b31 * a11 + b32 * a21 + b33 * a31,\n        b30 * a02 + b31 * a12 + b32 * a22 + b33 * a32,\n        b30 * a03 + b31 * a13 + b32 * a23 + b33 * a33,\n      ]);\n    }\n  }\n\n  public at(index: number): number {\n    return this.values[index];\n  }\n\n  public init(values: number[]): Matrix4 {\n    for (let i = 0; i < 16; i++) {\n      this.values[i] = values[i];\n    }\n\n    return this;\n  }\n\n  public reset(): void {\n    for (let i = 0; i < 16; i++) {\n      this.values[i] = 0;\n    }\n  }\n\n  public copy(dest: Matrix4 = null): Matrix4 {\n    if (!dest) {\n      return new Matrix4(\n        this.values[0], this.values[1], this.values[2], this.values[3],\n        this.values[4], this.values[5], this.values[6], this.values[7],\n        this.values[8], this.values[9], this.values[10], this.values[11],\n        this.values[12], this.values[13], this.values[14], this.values[15]\n      );\n    }\n\n    for (let i = 0; i < 16; i++) {\n      dest.values[i] = this.values[i];\n    }\n\n    return dest;\n  }\n\n  public all(): number[] {\n    let data: number[] = [];\n    for (let i = 0; i < 16; i++) {\n      data[i] = this.values[i];\n    }\n\n    return data;\n  }\n\n  public row(index: number): number[] {\n    return [\n      this.values[index * 4 + 0],\n      this.values[index * 4 + 1],\n      this.values[index * 4 + 2],\n      this.values[index * 4 + 3],\n    ];\n  }\n\n  public col(index: number): number[] {\n    return [\n      this.values[index],\n      this.values[index + 4],\n      this.values[index + 8],\n      this.values[index + 12],\n    ];\n  }\n\n  public index(row: number, col: number) {\n    return (row * 4) + col;\n  }\n\n  public entry(row: number, col: number) {\n    // console.assert((row >= 0) && (row < Matrix4.dimension));\n    // console.assert((col >= 0) && (col < Matrix4.dimension));\n\n    return this.values[this.index(row, col)];\n  }\n\n  public setEntry(row: number, col: number, v: number) {\n    this.values[this.index(row, col)] = v;\n\n    return this;\n  }\n\n  public setValues(\n    arg0: number,\n    arg1: number,\n    arg2: number,\n    arg3: number,\n    arg4: number,\n    arg5: number,\n    arg6: number,\n    arg7: number,\n    arg8: number,\n    arg9: number,\n    arg10: number,\n    arg11: number,\n    arg12: number,\n    arg13: number,\n    arg14: number,\n    arg15: number) {\n    this.values[0]  = arg0;\n    this.values[1]  = arg1;\n    this.values[2]  = arg2;\n    this.values[3]  = arg3;\n    this.values[4]  = arg4;\n    this.values[5]  = arg5;\n    this.values[6]  = arg6;\n    this.values[7]  = arg7;\n    this.values[8]  = arg8;\n    this.values[9]  = arg9;\n    this.values[10] = arg10;\n    this.values[11] = arg11;\n    this.values[12] = arg12;\n    this.values[13] = arg13;\n    this.values[14] = arg14;\n    this.values[15] = arg15;\n\n    return this;\n  }\n\n  public setFrom(arg: Matrix4) {\n    this.values[0]  = arg.values[0];\n    this.values[1]  = arg.values[1];\n    this.values[2]  = arg.values[2];\n    this.values[3]  = arg.values[3];\n    this.values[4]  = arg.values[4];\n    this.values[5]  = arg.values[5];\n    this.values[6]  = arg.values[6];\n    this.values[7]  = arg.values[7];\n    this.values[8]  = arg.values[8];\n    this.values[9]  = arg.values[9];\n    this.values[10] = arg.values[10];\n    this.values[11] = arg.values[11];\n    this.values[12] = arg.values[12];\n    this.values[13] = arg.values[13];\n    this.values[14] = arg.values[14];\n    this.values[15] = arg.values[15];\n\n    return this;\n  }\n\n  public equals(matrix: Matrix4, threshold = EPSILON): boolean {\n    for (let i = 0; i < 16; i++) {\n      if (Math.abs(this.values[i] - matrix.at(i)) > threshold) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  public determinant(): number {\n    const a00 = this.values[0],\n          a01 = this.values[1],\n          a02 = this.values[2],\n          a03 = this.values[3];\n\n    const a10 = this.values[4],\n          a11 = this.values[5],\n          a12 = this.values[6],\n          a13 = this.values[7];\n\n    const a20 = this.values[8],\n          a21 = this.values[9],\n          a22 = this.values[10],\n          a23 = this.values[11];\n\n    const a30 = this.values[12],\n          a31 = this.values[13],\n          a32 = this.values[14],\n          a33 = this.values[15];\n\n    const det00 = a00 * a11 - a01 * a10,\n          det01 = a00 * a12 - a02 * a10,\n          det02 = a00 * a13 - a03 * a10,\n          det03 = a01 * a12 - a02 * a11,\n          det04 = a01 * a13 - a03 * a11,\n          det05 = a02 * a13 - a03 * a12,\n          det06 = a20 * a31 - a21 * a30,\n          det07 = a20 * a32 - a22 * a30,\n          det08 = a20 * a33 - a23 * a30,\n          det09 = a21 * a32 - a22 * a31,\n          det10 = a21 * a33 - a23 * a31,\n          det11 = a22 * a33 - a23 * a32;\n\n    return (det00 * det11 - det01 * det10 + det02 * det09 + det03 * det08 - det04 * det07 + det05 * det06);\n  }\n\n  public setIdentity(): Matrix4 {\n    this.values[0]  = 1;\n    this.values[1]  = 0;\n    this.values[2]  = 0;\n    this.values[3]  = 0;\n    this.values[4]  = 0;\n    this.values[5]  = 1;\n    this.values[6]  = 0;\n    this.values[7]  = 0;\n    this.values[8]  = 0;\n    this.values[9]  = 0;\n    this.values[10] = 1;\n    this.values[11] = 0;\n    this.values[12] = 0;\n    this.values[13] = 0;\n    this.values[14] = 0;\n    this.values[15] = 1;\n\n    return this;\n  }\n\n  /**\n   * 转置矩阵\n   * Transpose the values of a {@class Matrix4}\n   *\n   * @returns\n   */\n  public transpose(): Matrix4 {\n    const temp01 = this.values[1];\n    const temp02 = this.values[2];\n    const temp03 = this.values[3];\n    const temp12 = this.values[6];\n    const temp13 = this.values[7];\n    const temp23 = this.values[11];\n\n    this.values[1]  = this.values[4];\n    this.values[2]  = this.values[8];\n    this.values[3]  = this.values[12];\n    this.values[4]  = temp01;\n    this.values[6]  = this.values[9];\n    this.values[7]  = this.values[13];\n    this.values[8]  = temp02;\n    this.values[9]  = temp12;\n    this.values[11] = this.values[14];\n    this.values[12] = temp03;\n    this.values[13] = temp13;\n    this.values[14] = temp23;\n\n    return this;\n  }\n\n  public inverse(): Matrix4 {\n    const a00 = this.values[0];\n    const a01 = this.values[1];\n    const a02 = this.values[2];\n    const a03 = this.values[3];\n    const a10 = this.values[4];\n    const a11 = this.values[5];\n    const a12 = this.values[6];\n    const a13 = this.values[7];\n    const a20 = this.values[8];\n    const a21 = this.values[9];\n    const a22 = this.values[10];\n    const a23 = this.values[11];\n    const a30 = this.values[12];\n    const a31 = this.values[13];\n    const a32 = this.values[14];\n    const a33 = this.values[15];\n\n    const det00 = a00 * a11 - a01 * a10;\n    const det01 = a00 * a12 - a02 * a10;\n    const det02 = a00 * a13 - a03 * a10;\n    const det03 = a01 * a12 - a02 * a11;\n    const det04 = a01 * a13 - a03 * a11;\n    const det05 = a02 * a13 - a03 * a12;\n    const det06 = a20 * a31 - a21 * a30;\n    const det07 = a20 * a32 - a22 * a30;\n    const det08 = a20 * a33 - a23 * a30;\n    const det09 = a21 * a32 - a22 * a31;\n    const det10 = a21 * a33 - a23 * a31;\n    const det11 = a22 * a33 - a23 * a32;\n\n    let det = (det00 * det11 - det01 * det10 + det02 * det09 + det03 * det08 - det04 * det07 + det05 * det06);\n\n    if (!det) {\n      return null;\n    }\n\n    det = 1.0 / det;\n\n    this.values[0]  = (a11 * det11 - a12 * det10 + a13 * det09) * det;\n    this.values[1]  = (-a01 * det11 + a02 * det10 - a03 * det09) * det;\n    this.values[2]  = (a31 * det05 - a32 * det04 + a33 * det03) * det;\n    this.values[3]  = (-a21 * det05 + a22 * det04 - a23 * det03) * det;\n    this.values[4]  = (-a10 * det11 + a12 * det08 - a13 * det07) * det;\n    this.values[5]  = (a00 * det11 - a02 * det08 + a03 * det07) * det;\n    this.values[6]  = (-a30 * det05 + a32 * det02 - a33 * det01) * det;\n    this.values[7]  = (a20 * det05 - a22 * det02 + a23 * det01) * det;\n    this.values[8]  = (a10 * det10 - a11 * det08 + a13 * det06) * det;\n    this.values[9]  = (-a00 * det10 + a01 * det08 - a03 * det06) * det;\n    this.values[10] = (a30 * det04 - a31 * det02 + a33 * det00) * det;\n    this.values[11] = (-a20 * det04 + a21 * det02 - a23 * det00) * det;\n    this.values[12] = (-a10 * det09 + a11 * det07 - a12 * det06) * det;\n    this.values[13] = (a00 * det09 - a01 * det07 + a02 * det06) * det;\n    this.values[14] = (-a30 * det03 + a31 * det01 - a32 * det00) * det;\n    this.values[15] = (a20 * det03 - a21 * det01 + a22 * det00) * det;\n\n    return this;\n  }\n\n  /**\n   * Calculates the adjugate of a {@class Matrix4}\n   */\n  public adjoint() {\n    const a00 = this.values[0];\n    const a01 = this.values[1];\n    const a02 = this.values[2];\n    const a03 = this.values[3];\n    const a10 = this.values[4];\n    const a11 = this.values[5];\n    const a12 = this.values[6];\n    const a13 = this.values[7];\n    const a20 = this.values[8];\n    const a21 = this.values[9];\n    const a22 = this.values[10];\n    const a23 = this.values[11];\n    const a30 = this.values[12];\n    const a31 = this.values[13];\n    const a32 = this.values[14];\n    const a33 = this.values[15];\n\n    this.values[0]  =\n      a11 * (a22 * a33 - a23 * a32) -\n      a21 * (a12 * a33 - a13 * a32) +\n      a31 * (a12 * a23 - a13 * a22);\n    this.values[1]  = -(\n      a01 * (a22 * a33 - a23 * a32) -\n      a21 * (a02 * a33 - a03 * a32) +\n      a31 * (a02 * a23 - a03 * a22)\n    );\n    this.values[2]  =\n      a01 * (a12 * a33 - a13 * a32) -\n      a11 * (a02 * a33 - a03 * a32) +\n      a31 * (a02 * a13 - a03 * a12);\n    this.values[3]  = -(\n      a01 * (a12 * a23 - a13 * a22) -\n      a11 * (a02 * a23 - a03 * a22) +\n      a21 * (a02 * a13 - a03 * a12)\n    );\n    this.values[4]  = -(\n      a10 * (a22 * a33 - a23 * a32) -\n      a20 * (a12 * a33 - a13 * a32) +\n      a30 * (a12 * a23 - a13 * a22)\n    );\n    this.values[5]  =\n      a00 * (a22 * a33 - a23 * a32) -\n      a20 * (a02 * a33 - a03 * a32) +\n      a30 * (a02 * a23 - a03 * a22);\n    this.values[6]  = -(\n      a00 * (a12 * a33 - a13 * a32) -\n      a10 * (a02 * a33 - a03 * a32) +\n      a30 * (a02 * a13 - a03 * a12)\n    );\n    this.values[7]  =\n      a00 * (a12 * a23 - a13 * a22) -\n      a10 * (a02 * a23 - a03 * a22) +\n      a20 * (a02 * a13 - a03 * a12);\n    this.values[8]  =\n      a10 * (a21 * a33 - a23 * a31) -\n      a20 * (a11 * a33 - a13 * a31) +\n      a30 * (a11 * a23 - a13 * a21);\n    this.values[9]  = -(\n      a00 * (a21 * a33 - a23 * a31) -\n      a20 * (a01 * a33 - a03 * a31) +\n      a30 * (a01 * a23 - a03 * a21)\n    );\n    this.values[10] =\n      a00 * (a11 * a33 - a13 * a31) -\n      a10 * (a01 * a33 - a03 * a31) +\n      a30 * (a01 * a13 - a03 * a11);\n    this.values[11] = -(\n      a00 * (a11 * a23 - a13 * a21) -\n      a10 * (a01 * a23 - a03 * a21) +\n      a20 * (a01 * a13 - a03 * a11)\n    );\n    this.values[12] = -(\n      a10 * (a21 * a32 - a22 * a31) -\n      a20 * (a11 * a32 - a12 * a31) +\n      a30 * (a11 * a22 - a12 * a21)\n    );\n    this.values[13] =\n      a00 * (a21 * a32 - a22 * a31) -\n      a20 * (a01 * a32 - a02 * a31) +\n      a30 * (a01 * a22 - a02 * a21);\n    this.values[14] = -(\n      a00 * (a11 * a32 - a12 * a31) -\n      a10 * (a01 * a32 - a02 * a31) +\n      a30 * (a01 * a12 - a02 * a11)\n    );\n    this.values[15] =\n      a00 * (a11 * a22 - a12 * a21) -\n      a10 * (a01 * a22 - a02 * a21) +\n      a20 * (a01 * a12 - a02 * a11);\n    return this;\n  }\n\n  public multiply(matrix: Matrix4): Matrix4 {\n    // @formatter:off\n\n    const a00 =  this.values[0], a01 =  this.values[1], a02 =  this.values[2], a03 =  this.values[3];\n    const a10 =  this.values[4], a11 =  this.values[5], a12 =  this.values[6], a13 =  this.values[7];\n    const a20 =  this.values[8], a21 =  this.values[9], a22 = this.values[10], a23 = this.values[11];\n    const a30 = this.values[12], a31 = this.values[13], a32 = this.values[14], a33 = this.values[15];\n\n    // @formatter:on\n\n    let b0 = matrix.at(0),\n        b1 = matrix.at(1),\n        b2 = matrix.at(2),\n        b3 = matrix.at(3);\n\n    this.values[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    this.values[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    this.values[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    this.values[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n    b0 = matrix.at(4);\n    b1 = matrix.at(5);\n    b2 = matrix.at(6);\n    b3 = matrix.at(7);\n\n    this.values[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    this.values[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    this.values[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    this.values[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n    b0 = matrix.at(8);\n    b1 = matrix.at(9);\n    b2 = matrix.at(10);\n    b3 = matrix.at(11);\n\n    this.values[8]  = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    this.values[9]  = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    this.values[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    this.values[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n    b0 = matrix.at(12);\n    b1 = matrix.at(13);\n    b2 = matrix.at(14);\n    b3 = matrix.at(15);\n\n    this.values[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n    this.values[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n    this.values[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n    this.values[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n\n    return this;\n  }\n\n  public multiplied(m: Matrix4) {\n    return this.clone().multiply(m);\n  }\n\n  public transformVector4(v: Vector4) {\n    const x  = v.x,\n          y  = v.y,\n          z  = v.z,\n          w  = v.w;\n    const _x = this.values[0] * x + this.values[1] * y + this.values[2] * z + this.values[3] * w;\n    const _y = this.values[4] * x + this.values[5] * y + this.values[6] * z + this.values[7] * w;\n    const _z = this.values[8] * x + this.values[9] * y + this.values[10] * z + this.values[11] * w;\n    const _w = this.values[12] * x + this.values[13] * y + this.values[14] * z + this.values[15] * w;\n\n    v.setValues(_x, _y, _z, _w);\n    return v;\n  }\n\n  /// Rotates [arg] by the absolute rotation of [this]\n  /// Returns [arg].\n\n  public transformVector3(v: Vector3) {\n    const x  = v.x,\n          y  = v.y,\n          z  = v.z;\n    const _x = this.values[0] * x + this.values[1] * y + this.values[2] * z + this.values[3];\n    const _y = this.values[4] * x + this.values[5] * y + this.values[6] * z + this.values[7];\n    const _z = this.values[8] * x + this.values[9] * y + this.values[10] * z + this.values[11];\n\n    v.setValues(_x, _y, _z);\n    return v;\n  }\n\n  public toMatrix3(): Matrix3 {\n    return new Matrix3([\n      this.values[0],\n      this.values[1],\n      this.values[2],\n      this.values[4],\n      this.values[5],\n      this.values[6],\n      this.values[8],\n      this.values[9],\n      this.values[10],\n    ]);\n  }\n\n  public toInverseMatrix3(): Matrix3 {\n    const a00 = this.values[0];\n    const a01 = this.values[1];\n    const a02 = this.values[2];\n    const a10 = this.values[4];\n    const a11 = this.values[5];\n    const a12 = this.values[6];\n    const a20 = this.values[8];\n    const a21 = this.values[9];\n    const a22 = this.values[10];\n\n    const det01 = a22 * a11 - a12 * a21;\n    const det11 = -a22 * a10 + a12 * a20;\n    const det21 = a21 * a10 - a11 * a20;\n\n    let det = a00 * det01 + a01 * det11 + a02 * det21;\n\n    if (!det) {\n      return null;\n    }\n\n    det = 1.0 / det;\n\n    return new Matrix3([\n      det01 * det,\n      (-a22 * a01 + a02 * a21) * det,\n      (a12 * a01 - a02 * a11) * det,\n      det11 * det,\n      (a22 * a00 - a02 * a20) * det,\n      (-a12 * a00 + a02 * a10) * det,\n      det21 * det,\n      (-a21 * a00 + a01 * a20) * det,\n      (a11 * a00 - a01 * a10) * det,\n    ]);\n  }\n\n  public translate(vector: Vector3): Matrix4 {\n    const x = vector.x;\n    const y = vector.y;\n    const z = vector.z;\n\n    this.values[12] += this.values[0] * x + this.values[4] * y + this.values[8] * z;\n    this.values[13] += this.values[1] * x + this.values[5] * y + this.values[9] * z;\n    this.values[14] += this.values[2] * x + this.values[6] * y + this.values[10] * z;\n    this.values[15] += this.values[3] * x + this.values[7] * y + this.values[11] * z;\n\n    return this;\n  }\n\n  public scale(vector: Vector3): Matrix4 {\n    const x = vector.x;\n    const y = vector.y;\n    const z = vector.z;\n\n    this.values[0] *= x;\n    this.values[1] *= x;\n    this.values[2] *= x;\n    this.values[3] *= x;\n\n    this.values[4] *= y;\n    this.values[5] *= y;\n    this.values[6] *= y;\n    this.values[7] *= y;\n\n    this.values[8] *= z;\n    this.values[9] *= z;\n    this.values[10] *= z;\n    this.values[11] *= z;\n\n    return this;\n  }\n\n  public rotate(radians: number, axis: Vector3): Matrix4 {\n    let x = axis.x;\n    let y = axis.y;\n    let z = axis.z;\n\n    let length = Math.sqrt(x * x + y * y + z * z);\n\n    if (!length) {\n      return null;\n    }\n\n    if (length !== 1) {\n      length = 1 / length;\n      x *= length;\n      y *= length;\n      z *= length;\n    }\n\n    const s = Math.sin(radians);\n    const c = Math.cos(radians);\n\n    const t = 1.0 - c;\n\n    const a00 = this.values[0];\n    const a01 = this.values[1];\n    const a02 = this.values[2];\n    const a03 = this.values[3];\n    const a10 = this.values[4];\n    const a11 = this.values[5];\n    const a12 = this.values[6];\n    const a13 = this.values[7];\n    const a20 = this.values[8];\n    const a21 = this.values[9];\n    const a22 = this.values[10];\n    const a23 = this.values[11];\n\n    const b00 = x * x * t + c;\n    const b01 = y * x * t + z * s;\n    const b02 = z * x * t - y * s;\n    const b10 = x * y * t - z * s;\n    const b11 = y * y * t + c;\n    const b12 = z * y * t + x * s;\n    const b20 = x * z * t + y * s;\n    const b21 = y * z * t - x * s;\n    const b22 = z * z * t + c;\n\n    this.values[0] = a00 * b00 + a10 * b01 + a20 * b02;\n    this.values[1] = a01 * b00 + a11 * b01 + a21 * b02;\n    this.values[2] = a02 * b00 + a12 * b01 + a22 * b02;\n    this.values[3] = a03 * b00 + a13 * b01 + a23 * b02;\n\n    this.values[4] = a00 * b10 + a10 * b11 + a20 * b12;\n    this.values[5] = a01 * b10 + a11 * b11 + a21 * b12;\n    this.values[6] = a02 * b10 + a12 * b11 + a22 * b12;\n    this.values[7] = a03 * b10 + a13 * b11 + a23 * b12;\n\n    this.values[8]  = a00 * b20 + a10 * b21 + a20 * b22;\n    this.values[9]  = a01 * b20 + a11 * b21 + a21 * b22;\n    this.values[10] = a02 * b20 + a12 * b21 + a22 * b22;\n    this.values[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n    return this;\n  }\n\n  /**\n   * Rotates a matrix by the given angle around the X axis\n   *\n   * @param  rad\n   * @returns\n   */\n  public rotateX(rad: number): Matrix4 {\n    const s   = Math.sin(rad);\n    const c   = Math.cos(rad);\n    const a10 = this.values[4];\n    const a11 = this.values[5];\n    const a12 = this.values[6];\n    const a13 = this.values[7];\n    const a20 = this.values[8];\n    const a21 = this.values[9];\n    const a22 = this.values[10];\n    const a23 = this.values[11];\n\n    // Perform axis-specific matrix multiplication\n    this.values[4]  = a10 * c + a20 * s;\n    this.values[5]  = a11 * c + a21 * s;\n    this.values[6]  = a12 * c + a22 * s;\n    this.values[7]  = a13 * c + a23 * s;\n    this.values[8]  = a20 * c - a10 * s;\n    this.values[9]  = a21 * c - a11 * s;\n    this.values[10] = a22 * c - a12 * s;\n    this.values[11] = a23 * c - a13 * s;\n    return this;\n  }\n\n  /**\n   * Rotates a matrix by the given angle around the Y axis\n   *\n   * @param  rad the angle to rotate the matrix by\n   * @returns\n   */\n  public rotateY(rad: number) {\n    const s   = Math.sin(rad);\n    const c   = Math.cos(rad);\n    const a00 = this.values[0];\n    const a01 = this.values[1];\n    const a02 = this.values[2];\n    const a03 = this.values[3];\n    const a20 = this.values[8];\n    const a21 = this.values[9];\n    const a22 = this.values[10];\n    const a23 = this.values[11];\n\n    // Perform axis-specific matrix multiplication\n    this.values[0]  = a00 * c - a20 * s;\n    this.values[1]  = a01 * c - a21 * s;\n    this.values[2]  = a02 * c - a22 * s;\n    this.values[3]  = a03 * c - a23 * s;\n    this.values[8]  = a00 * s + a20 * c;\n    this.values[9]  = a01 * s + a21 * c;\n    this.values[10] = a02 * s + a22 * c;\n    this.values[11] = a03 * s + a23 * c;\n    return this;\n  }\n\n  /**\n   * Rotates a matrix by the given angle around the Z axis\n   *\n   * @param  rad the angle to rotate the matrix by\n   * @returns\n   */\n  public rotateZ(rad: number) {\n    const s   = Math.sin(rad);\n    const c   = Math.cos(rad);\n    const a00 = this.values[0];\n    const a01 = this.values[1];\n    const a02 = this.values[2];\n    const a03 = this.values[3];\n    const a10 = this.values[4];\n    const a11 = this.values[5];\n    const a12 = this.values[6];\n    const a13 = this.values[7];\n\n    // Perform axis-specific matrix multiplication\n    this.values[0] = a00 * c + a10 * s;\n    this.values[1] = a01 * c + a11 * s;\n    this.values[2] = a02 * c + a12 * s;\n    this.values[3] = a03 * c + a13 * s;\n    this.values[4] = a10 * c - a00 * s;\n    this.values[5] = a11 * c - a01 * s;\n    this.values[6] = a12 * c - a02 * s;\n    this.values[7] = a13 * c - a03 * s;\n    return this;\n  }\n\n  /**\n   * TODO\n   * @param radians\n   */\n  public setRotationX(radians: number) {\n    const c = Math.cos(radians);\n    const s = Math.sin(radians);\n\n    this.values[0] = 1;\n    this.values[1] = 0;\n    this.values[2] = 0;\n\n    this.values[4] = 0;\n    this.values[5] = c;\n    this.values[6] = -s;\n\n    this.values[8]  = 0;\n    this.values[9]  = s;\n    this.values[10] = c;\n\n    this.values[12] = 0;\n    this.values[13] = 0;\n    this.values[14] = 0;\n\n    return this;\n  }\n\n  /**\n   * TODO\n   * @param radians\n   */\n  public setRotationY(radians: number) {\n    const c = Math.cos(radians);\n    const s = Math.sin(radians);\n\n    this.values[0] = c;\n    this.values[1] = 0;\n    this.values[2] = s;\n    this.values[3] = 0;\n\n    this.values[4] = 0;\n    this.values[5] = 1;\n    this.values[6] = 0;\n    this.values[7] = 0;\n\n    this.values[8]  = -s;\n    this.values[9]  = 0;\n    this.values[10] = c;\n    this.values[11] = 0;\n\n    return this;\n  }\n\n  /**\n   * TODO\n   * @param radians\n   */\n  public setRotationZ(radians: number) {\n    const c = Math.cos(radians);\n    const s = Math.sin(radians);\n\n    this.values[0] = c;\n    this.values[1] = -s;\n    this.values[2] = 0;\n\n    this.values[4] = s;\n    this.values[5] = c;\n    this.values[6] = 0;\n\n    this.values[8]  = 0;\n    this.values[9]  = 0;\n    this.values[10] = 1;\n\n    this.values[12] = 0;\n    this.values[13] = 0;\n    this.values[14] = 0;\n  }\n\n  public rotateVector3(v: Vector3) {\n    v.setValues(\n      this.values[0] * v.x + this.values[1] * v.y + this.values[2] * v.z,\n      this.values[4] * v.x + this.values[5] * v.y + this.values[6] * v.z,\n      this.values[8] * v.x + this.values[9] * v.y + this.values[10] * v.z\n    );\n\n    return v;\n  }\n\n  public rotated3(v: Vector3, out?: Vector3) {\n    if (!out) {\n      out = v.clone();\n    } else {\n      out.setFrom(v);\n    }\n    return this.rotateVector3(out);\n  }\n\n  /**\n   * Returns the translation vector component of a transformation\n   *  matrix. If a matrix is built with fromRotationTranslation,\n   *  the returned vector will be the same as the translation vector\n   *  originally supplied.\n   * @return\n   */\n  public getTranslation() {\n    return new Vector3(\n      this.values[12],\n      this.values[13],\n      this.values[14]\n    );\n  }\n\n  /**\n   * Returns the scaling factor component of a transformation\n   *  matrix. If a matrix is built with fromRotationTranslationScale\n   *  with a normalized Quaternion paramter, the returned vector will be\n   *  the same as the scaling vector\n   *  originally supplied.\n   * @return\n   */\n  public getScaling() {\n    const m11 = this.values[0];\n    const m12 = this.values[1];\n    const m13 = this.values[2];\n    const m21 = this.values[4];\n    const m22 = this.values[5];\n    const m23 = this.values[6];\n    const m31 = this.values[8];\n    const m32 = this.values[9];\n    const m33 = this.values[10];\n\n    return new Vector3(\n      Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),\n      Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),\n      Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33)\n    );\n  }\n\n  /**\n   * Returns a Quaternion representing the rotational component\n   *  of a transformation matrix. If a matrix is built with\n   *  fromRotationTranslation, the returned Quaternion will be the\n   *  same as the Quaternion originally supplied.\n   * @return\n   */\n  public getRotation() {\n    const out = [];\n\n    // Algorithm taken from http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n    const trace = this.values[0] + this.values[5] + this.values[10];\n    let S       = 0;\n\n    if (trace > 0) {\n      S      = Math.sqrt(trace + 1.0) * 2;\n      out[3] = 0.25 * S;\n      out[0] = (this.values[6] - this.values[9]) / S;\n      out[1] = (this.values[8] - this.values[2]) / S;\n      out[2] = (this.values[1] - this.values[4]) / S;\n    } else if (this.values[0] > this.values[5] && this.values[0] > this.values[10]) {\n      S      = Math.sqrt(1.0 + this.values[0] - this.values[5] - this.values[10]) * 2;\n      out[3] = (this.values[6] - this.values[9]) / S;\n      out[0] = 0.25 * S;\n      out[1] = (this.values[1] + this.values[4]) / S;\n      out[2] = (this.values[8] + this.values[2]) / S;\n    } else if (this.values[5] > this.values[10]) {\n      S      = Math.sqrt(1.0 + this.values[5] - this.values[0] - this.values[10]) * 2;\n      out[3] = (this.values[8] - this.values[2]) / S;\n      out[0] = (this.values[1] + this.values[4]) / S;\n      out[1] = 0.25 * S;\n      out[2] = (this.values[6] + this.values[9]) / S;\n    } else {\n      S      = Math.sqrt(1.0 + this.values[10] - this.values[0] - this.values[5]) * 2;\n      out[3] = (this.values[1] - this.values[4]) / S;\n      out[0] = (this.values[8] + this.values[2]) / S;\n      out[1] = (this.values[6] + this.values[9]) / S;\n      out[2] = 0.25 * S;\n    }\n\n    return new Quaternion(out);\n  }\n\n  /// Primarily used by AABB transformation code.\n  public absoluteRotate(v: Vector3): Vector3 {\n    const m00 = Math.abs(this.values[0]);\n    const m01 = Math.abs(this.values[1]);\n    const m02 = Math.abs(this.values[2]);\n    const m10 = Math.abs(this.values[4]);\n    const m11 = Math.abs(this.values[5]);\n    const m12 = Math.abs(this.values[6]);\n    const m20 = Math.abs(this.values[8]);\n    const m21 = Math.abs(this.values[9]);\n    const m22 = Math.abs(this.values[10]);\n\n    const x = v.x;\n    const y = v.y;\n    const z = v.z;\n    v.setValues(\n      x * m00 + y * m01 + z * m02,\n      x * m10 + y * m11 + z * m12,\n      x * m20 + y * m21 + z * m22\n    );\n    return v;\n  }\n\n  /**\n   * Adds two mat4's\n   *\n   * @param  matrix the second operand\n   * @returns   out\n   */\n  public add(matrix: Matrix4) {\n    this.values[0]  = this.values[0] + matrix.at(0);\n    this.values[1]  = this.values[1] + matrix.at(1);\n    this.values[2]  = this.values[2] + matrix.at(2);\n    this.values[3]  = this.values[3] + matrix.at(3);\n    this.values[4]  = this.values[4] + matrix.at(4);\n    this.values[5]  = this.values[5] + matrix.at(5);\n    this.values[6]  = this.values[6] + matrix.at(6);\n    this.values[7]  = this.values[7] + matrix.at(7);\n    this.values[8]  = this.values[8] + matrix.at(8);\n    this.values[9]  = this.values[9] + matrix.at(9);\n    this.values[10] = this.values[10] + matrix.at(10);\n    this.values[11] = this.values[11] + matrix.at(11);\n    this.values[12] = this.values[12] + matrix.at(12);\n    this.values[13] = this.values[13] + matrix.at(13);\n    this.values[14] = this.values[14] + matrix.at(14);\n    this.values[15] = this.values[15] + matrix.at(15);\n    return this;\n  }\n\n  /**\n   * Subtracts matrix b from matrix a\n   *\n   * @param  matrix the second operand\n   * @returns\n   */\n  public subtract(matrix: Matrix4) {\n    this.values[0]  = this.values[0] - matrix.at(0);\n    this.values[1]  = this.values[1] - matrix.at(1);\n    this.values[2]  = this.values[2] - matrix.at(2);\n    this.values[3]  = this.values[3] - matrix.at(3);\n    this.values[4]  = this.values[4] - matrix.at(4);\n    this.values[5]  = this.values[5] - matrix.at(5);\n    this.values[6]  = this.values[6] - matrix.at(6);\n    this.values[7]  = this.values[7] - matrix.at(7);\n    this.values[8]  = this.values[8] - matrix.at(8);\n    this.values[9]  = this.values[9] - matrix.at(9);\n    this.values[10] = this.values[10] - matrix.at(10);\n    this.values[11] = this.values[11] - matrix.at(11);\n    this.values[12] = this.values[12] - matrix.at(12);\n    this.values[13] = this.values[13] - matrix.at(13);\n    this.values[14] = this.values[14] - matrix.at(14);\n    this.values[15] = this.values[15] - matrix.at(15);\n    return this;\n  }\n\n  /**\n   * Multiply each element of the matrix by a scalar.\n   *\n   * @param  scalar amount to scale the matrix's elements by\n   * @returns   out\n   */\n  public multiplyScalar(scalar: number) {\n    this.values[0]  = this.values[0] * scalar;\n    this.values[1]  = this.values[1] * scalar;\n    this.values[2]  = this.values[2] * scalar;\n    this.values[3]  = this.values[3] * scalar;\n    this.values[4]  = this.values[4] * scalar;\n    this.values[5]  = this.values[5] * scalar;\n    this.values[6]  = this.values[6] * scalar;\n    this.values[7]  = this.values[7] * scalar;\n    this.values[8]  = this.values[8] * scalar;\n    this.values[9]  = this.values[9] * scalar;\n    this.values[10] = this.values[10] * scalar;\n    this.values[11] = this.values[11] * scalar;\n    this.values[12] = this.values[12] * scalar;\n    this.values[13] = this.values[13] * scalar;\n    this.values[14] = this.values[14] * scalar;\n    this.values[15] = this.values[15] * scalar;\n    return this;\n  }\n\n  /**\n   * Clone\n   *\n   * @returns   A new {@class Matrix3}\n   */\n  public clone() {\n    return this.copy();\n  }\n\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nimport { EPSILON, equals } from './common';\nimport { Matrix4 } from './matrix4';\nimport { Quaternion } from './quaternion';\nimport { Vector2 } from './vector2';\nimport { Vector3 } from './vector3';\n\nexport class Matrix3 {\n  public static readonly dimension = 3;\n\n  private values = new Float32Array(9);\n\n  constructor(values?: number[])\n  constructor(a11: number, a12: number, a13: number,\n              a21: number, a22: number, a23: number,\n              a31: number, a32: number, a33: number)\n  constructor(a11?: number | number[], a12?: number, a13?: number,\n              a21?: number, a22?: number, a23?: number,\n              a31?: number, a32?: number, a33?: number) {\n    if (arguments.length === 1) {\n      if (a11) {\n        this.init(a11 as number[]);\n      }\n    } else if (arguments.length === 9) {\n      this.values[0] = a11 as number;\n      this.values[1] = a12;\n      this.values[2] = a13;\n\n      this.values[3] = a21;\n      this.values[4] = a22;\n      this.values[5] = a23;\n\n      this.values[6] = a31;\n      this.values[7] = a32;\n      this.values[8] = a33;\n    } else {\n      this.values[0] = this.values[1] = this.values[2] = 0;\n      this.values[3] = this.values[4] = this.values[5] = 0;\n      this.values[6] = this.values[7] = this.values[8] = 0;\n    }\n  }\n\n  public static zero() {\n    return new Matrix3(\n      0, 0, 0,\n      0, 0, 0,\n      0, 0, 0\n    );\n  }\n\n  public static product(m1: Matrix3, m2: Matrix3, result: Matrix3 = null): Matrix3 {\n    if (!result) {\n      result = new Matrix3();\n    }\n\n    const a00 = m1.at(0), a01 = m1.at(1), a02 = m1.at(2);\n    const a10 = m1.at(3), a11 = m1.at(4), a12 = m1.at(5);\n    const a20 = m1.at(6), a21 = m1.at(7), a22 = m1.at(8);\n\n    const b00 = m2.at(0), b01 = m2.at(1), b02 = m2.at(2);\n    const b10 = m2.at(3), b11 = m2.at(4), b12 = m2.at(5);\n    const b20 = m2.at(6), b21 = m2.at(7), b22 = m2.at(8);\n\n    result.init([\n      b00 * a00 + b01 * a10 + b02 * a20,\n      b00 * a01 + b01 * a11 + b02 * a21,\n      b00 * a02 + b01 * a12 + b02 * a22,\n\n      b10 * a00 + b11 * a10 + b12 * a20,\n      b10 * a01 + b11 * a11 + b12 * a21,\n      b10 * a02 + b11 * a12 + b12 * a22,\n\n      b20 * a00 + b21 * a10 + b22 * a20,\n      b20 * a01 + b21 * a11 + b22 * a21,\n      b20 * a02 + b21 * a12 + b22 * a22,\n    ]);\n\n    return result;\n  }\n\n  public static fromMatrix4(a: Matrix4): Matrix3 {\n    const out     = new Matrix3();\n    out.values[0] = a.at(0);\n    out.values[1] = a.at(1);\n    out.values[2] = a.at(2);\n    out.values[3] = a.at(4);\n    out.values[4] = a.at(5);\n    out.values[5] = a.at(6);\n    out.values[6] = a.at(8);\n    out.values[7] = a.at(9);\n    out.values[8] = a.at(10);\n    return out;\n  }\n\n  public static fromTranslate(v: Vector2): Matrix3 {\n    return new Matrix3(\n      1, 0, 0,\n      0, 1, 0,\n      v.x, v.y, 1\n    );\n  }\n\n  public static fromScaling(v: Vector2): Matrix3 {\n    return new Matrix3(\n      v.x, 0, 0,\n      0, v.y, 0,\n      0, 0, 1\n    );\n  }\n\n  public static fromRotate(v: Vector2): Matrix3 {\n    return new Matrix3(\n      1, 0, 0,\n      0, 1, 0,\n      0, 0, 1\n    );\n  }\n\n\n  public static absolute(m: Matrix3, out?: Matrix3) {\n    if (!out) {\n      out = new Matrix3();\n    }\n\n    out.values[0] = Math.abs(m.at(0));\n    out.values[1] = Math.abs(m.at(1));\n    out.values[2] = Math.abs(m.at(2));\n    out.values[3] = Math.abs(m.at(3));\n    out.values[4] = Math.abs(m.at(4));\n    out.values[5] = Math.abs(m.at(5));\n    out.values[6] = Math.abs(m.at(6));\n    out.values[7] = Math.abs(m.at(7));\n    out.values[8] = Math.abs(m.at(8));\n\n    return out;\n  }\n\n  public at(index: number): number {\n    return this.values[index];\n  }\n\n  /**\n   * Create a new {@class Matrix3} with the given values\n   * @param  values\n   * @returns   A new {@class Matrix3}\n   */\n  public init(values: number[]): Matrix3 {\n    for (let i = 0; i < 9; i++) {\n      this.values[i] = values[i];\n    }\n\n    return this;\n  }\n\n  /**\n   * Reset the {@class Matrix3}\n   */\n  public reset(): void {\n    for (let i = 0; i < 9; i++) {\n      this.values[i] = 0;\n    }\n  }\n\n  public copy(dest: Matrix3 = null): Matrix3 {\n    if (!dest) {\n      return new Matrix3(\n        this.values[0], this.values[1], this.values[2],\n        this.values[3], this.values[4], this.values[5],\n        this.values[6], this.values[7], this.values[8]\n      );\n    }\n\n    for (let i = 0; i < 9; i++) {\n      dest.values[i] = this.values[i];\n    }\n\n    return dest;\n  }\n\n  public all(): number[] {\n    let data: number[] = [];\n    for (let i = 0; i < 9; i++) {\n      data[i] = this.values[i];\n    }\n\n    return data;\n  }\n\n  public row(index: number): number[] {\n    return [\n      this.values[index * 3],\n      this.values[index * 3 + 1],\n      this.values[index * 3 + 2],\n    ];\n  }\n\n  public col(index: number): number[] {\n    return [\n      this.values[index],\n      this.values[index + 3],\n      this.values[index + 6],\n    ];\n  }\n\n  public index(row: number, col: number) {\n    return row * 3 + col;\n  }\n\n  public entry(row: number, col: number) {\n    // console.assert((row >= 0) && (row < Matrix3.dimension));\n    // console.assert((col >= 0) && (col < Matrix3.dimension));\n\n    return this.values[this.index(row, col)];\n  }\n\n  public setEntry(row: number, col: number, v: number) {\n    this.values[this.index(row, col)] = v;\n\n    return this;\n  }\n\n  public setValues(arg0: number, arg1: number, arg2: number,\n                   arg3: number, arg4: number, arg5: number,\n                   arg6: number, arg7: number, arg8: number) {\n    this.values[0] = arg0;\n    this.values[1] = arg1;\n    this.values[2] = arg2;\n    this.values[3] = arg3;\n    this.values[4] = arg4;\n    this.values[5] = arg5;\n    this.values[6] = arg6;\n    this.values[7] = arg7;\n    this.values[8] = arg8;\n\n    return this;\n  }\n\n  /**\n   * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n   *\n   * @param  b\n   * @returns\n   */\n  public exactEquals(b: Matrix3) {\n    return (\n      this.values[0] === b.at(0) &&\n      this.values[1] === b.at(1) &&\n      this.values[2] === b.at(2) &&\n      this.values[3] === b.at(3) &&\n      this.values[4] === b.at(4) &&\n      this.values[5] === b.at(5) &&\n      this.values[6] === b.at(6) &&\n      this.values[7] === b.at(7) &&\n      this.values[8] === b.at(8)\n    );\n  }\n\n  /**\n   *  Returns whether or not the matrices have approximately the same elements in the same position.\n   *\n   * @param  matrix\n   * @param  threshold\n   * @returns\n   */\n  public equals(matrix: Matrix3, threshold = EPSILON): boolean {\n    for (let i = 0; i < 9; i++) {\n      if (!equals(this.values[i], matrix.at(i))) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Calculates the determinant of {@class Matrix3}\n   *\n   * @returns\n   */\n  public determinant(): number {\n    const a00 = this.values[0], a01 = this.values[1], a02 = this.values[2];\n    const a10 = this.values[3], a11 = this.values[4], a12 = this.values[5];\n    const a20 = this.values[6], a21 = this.values[7], a22 = this.values[8];\n\n    return (\n      a00 * (a22 * a11 - a12 * a21) +\n      a01 * (-a22 * a10 + a12 * a20) +\n      a02 * (a21 * a10 - a11 * a20)\n    );\n  }\n\n  public setZero() {\n    this.values[0] = 0;\n    this.values[1] = 0;\n    this.values[2] = 0;\n    this.values[3] = 0;\n    this.values[4] = 0;\n    this.values[5] = 0;\n    this.values[6] = 0;\n    this.values[7] = 0;\n    this.values[8] = 0;\n  }\n\n  /**\n   * Set a mat3 to the setIdentity matrix\n   *\n   * @returns\n   */\n  public setIdentity(): Matrix3 {\n    this.values[0] = 1;\n    this.values[1] = 0;\n    this.values[2] = 0;\n    this.values[3] = 0;\n    this.values[4] = 1;\n    this.values[5] = 0;\n    this.values[6] = 0;\n    this.values[7] = 0;\n    this.values[8] = 1;\n\n    return this;\n  }\n\n  public setScale(vector: Vector2): this {\n    this.values[0] = vector.x;\n    this.values[1] = 0;\n    this.values[2] = 0;\n    this.values[3] = 0;\n    this.values[4] = vector.y;\n    this.values[5] = 0;\n    this.values[6] = 0;\n    this.values[7] = 0;\n    this.values[8] = 1;\n\n    return this;\n  }\n\n  /**\n   * Transpose the {@class Matrix3}\n   *\n   * @returns\n   */\n  public transpose(): Matrix3 {\n    const temp01 = this.values[1],\n          temp02 = this.values[2],\n          temp12 = this.values[5];\n\n    this.values[1] = this.values[3];\n    this.values[2] = this.values[6];\n    this.values[3] = temp01;\n    this.values[5] = this.values[7];\n    this.values[6] = temp02;\n    this.values[7] = temp12;\n\n    return this;\n  }\n\n  public transposed(): Matrix3 {\n    return this.clone().transpose();\n  }\n\n  /**\n   * Inverts a {@class Matrix3}\n   * @returns\n   */\n  public inverse(): Matrix3 {\n    const a00 = this.values[0], a01 = this.values[1], a02 = this.values[2];\n    const a10 = this.values[3], a11 = this.values[4], a12 = this.values[5];\n    const a20 = this.values[6], a21 = this.values[7], a22 = this.values[8];\n\n    const det01 = a22 * a11 - a12 * a21,\n          det11 = -a22 * a10 + a12 * a20,\n          det21 = a21 * a10 - a11 * a20;\n\n    let det = a00 * det01 + a01 * det11 + a02 * det21;\n\n    if (!det) {\n      return null;\n    }\n\n    det = 1.0 / det;\n\n    this.values[0] = det01 * det;\n    this.values[1] = (-a22 * a01 + a02 * a21) * det;\n    this.values[2] = (a12 * a01 - a02 * a11) * det;\n    this.values[3] = det11 * det;\n    this.values[4] = (a22 * a00 - a02 * a20) * det;\n    this.values[5] = (-a12 * a00 + a02 * a10) * det;\n    this.values[6] = det21 * det;\n    this.values[7] = (-a21 * a00 + a01 * a20) * det;\n    this.values[8] = (a11 * a00 - a01 * a10) * det;\n\n    return this;\n  }\n\n  public setRotationX(radians: number) {\n    const c        = Math.cos(radians);\n    const s        = Math.sin(radians);\n    this.values[0] = 1;\n    this.values[1] = 0;\n    this.values[2] = 0;\n    this.values[3] = 0;\n    this.values[4] = c;\n    this.values[5] = -s;\n    this.values[6] = 0;\n    this.values[7] = s;\n    this.values[8] = c;\n\n    return this;\n  }\n\n  public setRotationY(radians: number) {\n    const c        = Math.cos(radians);\n    const s        = Math.sin(radians);\n    this.values[0] = c;\n    this.values[1] = 0;\n    this.values[2] = -s;\n    this.values[3] = 0;\n    this.values[4] = 1;\n    this.values[5] = 0;\n    this.values[6] = s;\n    this.values[7] = 0;\n    this.values[8] = c;\n\n    return this;\n  }\n\n  public setRotationZ(radians: number) {\n    const c        = Math.cos(radians);\n    const s        = Math.sin(radians);\n    this.values[0] = c;\n    this.values[1] = -s;\n    this.values[2] = 0;\n    this.values[3] = s;\n    this.values[4] = c;\n    this.values[5] = 0;\n    this.values[6] = 0;\n    this.values[7] = 0;\n    this.values[8] = 1;\n\n    return this;\n  }\n\n  /**\n   * Calculates the adjugate of {@class Matrix3}\n   *\n   * @returns\n   */\n  public adjoint() {\n    const a00 = this.values[0], a01 = this.values[1], a02 = this.values[2];\n    const a10 = this.values[3], a11 = this.values[4], a12 = this.values[5];\n    const a20 = this.values[6], a21 = this.values[7], a22 = this.values[8];\n\n    this.values[0] = a11 * a22 - a12 * a21;\n    this.values[1] = a02 * a21 - a01 * a22;\n    this.values[2] = a01 * a12 - a02 * a11;\n    this.values[3] = a12 * a20 - a10 * a22;\n    this.values[4] = a00 * a22 - a02 * a20;\n    this.values[5] = a02 * a10 - a00 * a12;\n    this.values[6] = a10 * a21 - a11 * a20;\n    this.values[7] = a01 * a20 - a00 * a21;\n    this.values[8] = a00 * a11 - a01 * a10;\n    return this;\n  }\n\n  public rotateVector3(v: Vector3): Vector3 {\n    v.setValues(\n      v.x * this.values[0] + v.y * this.values[1] + v.z * this.values[2],\n      v.x * this.values[3] + v.y * this.values[4] + v.z * this.values[5],\n      v.x * this.values[6] + v.y * this.values[7] + v.z * this.values[8]\n    );\n    return v;\n  }\n\n  public rotateVector2(v: Vector2): Vector2 {\n    v.setValues(\n      v.x * this.values[0] + v.y * this.values[1],\n      v.x * this.values[3] + v.y * this.values[4]\n    );\n    return v;\n  }\n\n  public absoluteRotate2(v: Vector2): Vector2 {\n    v.setValues(\n      v.x * Math.abs(this.values[0]) + v.y * Math.abs(this.values[1]),\n      v.x * Math.abs(this.values[3]) + v.y * Math.abs(this.values[4])\n    );\n    return v;\n  }\n\n  public transformVector2(v: Vector2): Vector2 {\n    const _x = v.x * this.values[0] + v.y * this.values[1] + this.values[2];\n    const _y = v.x * this.values[3] + v.y * this.values[4] + this.values[5];\n\n    v.x = _x;\n    v.y = _y;\n    return v;\n  }\n\n  public transformVector3(v: Vector3): Vector3 {\n    v.setValues(\n      v.x + this.values[0] + v.y * this.values[1] + this.values[2],\n      v.x + this.values[3] + v.y * this.values[4] + this.values[5],\n      v.x + this.values[6] + v.y * this.values[7] + this.values[8]\n    );\n\n    return v;\n  }\n\n  public transformed(vector: Vector3, out?: Vector3): Vector3 {\n    if (!out) {\n      out = vector.clone();\n    } else {\n      vector.copy(out);\n    }\n\n    return this.transformVector3(out);\n  }\n\n  public transform(v: Vector3): Vector3 {\n    return this.transformVector3(v);\n  }\n\n  public scale(scale: number) {\n    this.values[0] = this.values[0] * scale;\n    this.values[1] = this.values[1] * scale;\n    this.values[2] = this.values[2] * scale;\n    this.values[3] = this.values[3] * scale;\n    this.values[4] = this.values[4] * scale;\n    this.values[5] = this.values[5] * scale;\n    this.values[6] = this.values[6] * scale;\n    this.values[7] = this.values[7] * scale;\n    this.values[8] = this.values[8] * scale;\n\n    return this;\n  }\n\n  public scaled(scale: number) {\n    return this.clone().scale(scale);\n  }\n\n  public scaleVector2(vector2: Vector2) {\n    this.values[0] = this.values[0] * vector2.x;\n    this.values[1] = this.values[1] * vector2.x;\n    this.values[2] = this.values[2] * vector2.x;\n    this.values[3] = this.values[3] * vector2.y;\n    this.values[4] = this.values[4] * vector2.y;\n    this.values[5] = this.values[5] * vector2.y;\n    return this;\n  }\n\n  public scaledVector2(vector2: Vector2) {\n    return this.clone().scaleVector2(vector2);\n  }\n\n  public add(m: Matrix3) {\n    this.values[0] = this.values[0] + m.at(0);\n    this.values[1] = this.values[1] + m.at(1);\n    this.values[2] = this.values[2] + m.at(2);\n    this.values[3] = this.values[3] + m.at(3);\n    this.values[4] = this.values[4] + m.at(4);\n    this.values[5] = this.values[5] + m.at(5);\n    this.values[6] = this.values[6] + m.at(6);\n    this.values[7] = this.values[7] + m.at(7);\n    this.values[8] = this.values[8] + m.at(8);\n\n    return this;\n  }\n\n  public sub(m: Matrix3) {\n    this.values[0] = this.values[0] - m.at(0);\n    this.values[1] = this.values[1] - m.at(1);\n    this.values[2] = this.values[2] - m.at(2);\n    this.values[3] = this.values[3] - m.at(3);\n    this.values[4] = this.values[4] - m.at(4);\n    this.values[5] = this.values[5] - m.at(5);\n    this.values[6] = this.values[6] - m.at(6);\n    this.values[7] = this.values[7] - m.at(7);\n    this.values[8] = this.values[8] - m.at(8);\n\n    return this;\n  }\n\n  public multiply(matrix: Matrix3): Matrix3 {\n    const a00 = this.values[0], a01 = this.values[1], a02 = this.values[2];\n    const a10 = this.values[3], a11 = this.values[4], a12 = this.values[5];\n    const a20 = this.values[6], a21 = this.values[7], a22 = this.values[8];\n\n    const b00 = matrix.at(0), b01 = matrix.at(1), b02 = matrix.at(2);\n    const b10 = matrix.at(3), b11 = matrix.at(4), b12 = matrix.at(5);\n    const b20 = matrix.at(6), b21 = matrix.at(7), b22 = matrix.at(8);\n\n    this.values[0] = b00 * a00 + b01 * a10 + b02 * a20;\n    this.values[1] = b00 * a01 + b01 * a11 + b02 * a21;\n    this.values[2] = b00 * a02 + b01 * a12 + b02 * a22;\n\n    this.values[3] = b10 * a00 + b11 * a10 + b12 * a20;\n    this.values[4] = b10 * a01 + b11 * a11 + b12 * a21;\n    this.values[5] = b10 * a02 + b11 * a12 + b12 * a22;\n\n    this.values[6] = b20 * a00 + b21 * a10 + b22 * a20;\n    this.values[7] = b20 * a01 + b21 * a11 + b22 * a21;\n    this.values[8] = b20 * a02 + b21 * a12 + b22 * a22;\n\n    return this;\n  }\n\n  // /**\n  //  * Rotates a {@class Matrix3} by the given angle\n  //  *\n  //  * @param  radians the angle to rotate the matrix by\n  //  * @returns\n  //  */\n  // public rotate(radians: number) {\n  //   const a00 = this.values[0];\n  //   const a01 = this.values[1];\n  //   const a02 = this.values[2];\n  //   const a10 = this.values[3];\n  //   const a11 = this.values[4];\n  //   const a12 = this.values[5];\n  //   const a20 = this.values[6];\n  //   const a21 = this.values[7];\n  //   const a22 = this.values[8];\n  //   const s   = Math.sin(radians);\n  //   const c   = Math.cos(radians);\n  //\n  //   this.values[0] = c * a00 + s * a10;\n  //   this.values[1] = c * a01 + s * a11;\n  //   this.values[2] = c * a02 + s * a12;\n  //\n  //   this.values[3] = c * a10 - s * a00;\n  //   this.values[4] = c * a11 - s * a01;\n  //   this.values[5] = c * a12 - s * a02;\n  //\n  //   this.values[6] = a20;\n  //   this.values[7] = a21;\n  //   this.values[8] = a22;\n  //   return this;\n  // }\n\n  public multiplied(m: Matrix3) {\n    return this.clone().multiply(m);\n  }\n\n  public toMatrix4(result?: Matrix4): Matrix4 {\n    if (!result) {\n      result = new Matrix4();\n    }\n\n    result.init([\n      this.values[0],\n      this.values[1],\n      this.values[2],\n      0,\n\n      this.values[3],\n      this.values[4],\n      this.values[5],\n      0,\n\n      this.values[6],\n      this.values[7],\n      this.values[8],\n      0,\n\n      0,\n      0,\n      0,\n      1,\n    ]);\n\n    return result;\n  }\n\n  public toQuaternion(result?: Quaternion): Quaternion {\n    if (!result) {\n      result = new Quaternion();\n    }\n\n    const m00 = this.values[0], m01 = this.values[1], m02 = this.values[2];\n    const m10 = this.values[3], m11 = this.values[4], m12 = this.values[5];\n    const m20 = this.values[6], m21 = this.values[7], m22 = this.values[8];\n\n    const fourXSquaredMinus1 = m00 - m11 - m22;\n    const fourYSquaredMinus1 = m11 - m00 - m22;\n    const fourZSquaredMinus1 = m22 - m00 - m11;\n    const fourWSquaredMinus1 = m00 + m11 + m22;\n\n    let biggestIndex = 0;\n\n    let fourBiggestSquaredMinus1 = fourWSquaredMinus1;\n\n    if (fourXSquaredMinus1 > fourBiggestSquaredMinus1) {\n      fourBiggestSquaredMinus1 = fourXSquaredMinus1;\n      biggestIndex             = 1;\n    }\n\n    if (fourYSquaredMinus1 > fourBiggestSquaredMinus1) {\n      fourBiggestSquaredMinus1 = fourYSquaredMinus1;\n      biggestIndex             = 2;\n    }\n\n    if (fourZSquaredMinus1 > fourBiggestSquaredMinus1) {\n      fourBiggestSquaredMinus1 = fourZSquaredMinus1;\n      biggestIndex             = 3;\n    }\n\n    const biggestVal = Math.sqrt(fourBiggestSquaredMinus1 + 1) * 0.5;\n    const mult       = 0.25 / biggestVal;\n\n    switch (biggestIndex) {\n      case 0:\n\n        result.w = biggestVal;\n        result.x = (m12 - m21) * mult;\n        result.y = (m20 - m02) * mult;\n        result.z = (m01 - m10) * mult;\n\n        break;\n\n      case 1:\n\n        result.w = (m12 - m21) * mult;\n        result.x = biggestVal;\n        result.y = (m01 + m10) * mult;\n        result.z = (m20 + m02) * mult;\n\n        break;\n\n      case 2:\n\n        result.w = (m20 - m02) * mult;\n        result.x = (m01 + m10) * mult;\n        result.y = biggestVal;\n        result.z = (m12 + m21) * mult;\n\n        break;\n\n      case 3:\n\n        result.w = (m01 - m10) * mult;\n        result.x = (m20 + m02) * mult;\n        result.y = (m12 + m21) * mult;\n        result.z = biggestVal;\n\n        break;\n    }\n\n    return result;\n  }\n\n  /**\n   * Translate a {@class Matrix3} by the given vector\n   *\n   * @param  v vector to translate by\n   * @returns\n   */\n  public translate(v: Vector2) {\n    const x = v.x;\n    const y = v.y;\n\n    const a00 = this.values[0];\n    const a01 = this.values[1];\n    const a02 = this.values[2];\n    const a10 = this.values[3];\n    const a11 = this.values[4];\n    const a12 = this.values[5];\n    const a20 = this.values[6];\n    const a21 = this.values[7];\n    const a22 = this.values[8];\n\n    this.values[0] = a00;\n    this.values[1] = a01;\n    this.values[2] = a02;\n\n    this.values[3] = a10;\n    this.values[4] = a11;\n    this.values[5] = a12;\n\n    this.values[6] = x * a00 + y * a10 + a20;\n    this.values[7] = x * a01 + y * a11 + a21;\n    this.values[8] = x * a02 + y * a12 + a22;\n    return this;\n  }\n\n  /**\n   * Clone\n   *\n   * @returns   A new {@class Matrix3}\n   */\n  public clone() {\n    return this.copy();\n  }\n\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nimport { clamp, EPSILON } from './common';\nimport { Matrix2 } from './matrix2';\nimport { Matrix3 } from './matrix3';\nimport { Vector3 } from './vector3';\nimport { Vector4 } from './vector4';\n\nexport class Vector2 {\n\n  private values = new Float32Array(2);\n\n  constructor(values?: number[]);\n\n  constructor(x: number, y: number);\n\n  constructor(x?: number | number[], y?: number) {\n    if (arguments.length === 1) {\n      if (x) {\n        this.x = (x as number[])[0];\n        this.y = (x as number[])[1];\n      }\n    } else if (arguments.length === 2) {\n      this.values[0] = x as number;\n      this.values[1] = y as number;\n    } else {\n      this.values[0] = 0;\n      this.values[1] = 0;\n    }\n  }\n\n  get xx(): Vector2 {\n    return new Vector2(this.values[0], this.values[0]);\n  }\n\n  get xy(): Vector2 {\n    return new Vector2(this.values[0], this.values[1]);\n  }\n\n  set xy(v: Vector2) {\n    this.values[0] = v.x;\n    this.values[1] = v.y;\n  }\n\n  get yx(): Vector2 {\n    return new Vector2(this.values[1], this.values[0]);\n  }\n\n  set yx(v: Vector2) {\n    this.values[1] = v.x;\n    this.values[0] = v.y;\n  }\n\n  get yy(): Vector2 {\n    return new Vector2(this.values[1], this.values[1]);\n  }\n\n  get xxx(): Vector3 {\n    return new Vector3(this.values[0], this.values[0], this.values[0]);\n  }\n\n  get xxy(): Vector3 {\n    return new Vector3(this.values[0], this.values[0], this.values[1]);\n  }\n\n  get xyx(): Vector3 {\n    return new Vector3(this.values[0], this.values[1], this.values[0]);\n  }\n\n  get xyy(): Vector3 {\n    return new Vector3(this.values[0], this.values[1], this.values[1]);\n  }\n\n  get yxx(): Vector3 {\n    return new Vector3(this.values[1], this.values[0], this.values[0]);\n  }\n\n  get yxy(): Vector3 {\n    return new Vector3(this.values[1], this.values[0], this.values[1]);\n  }\n\n  get yyx(): Vector3 {\n    return new Vector3(this.values[1], this.values[1], this.values[0]);\n  }\n\n  get yyy(): Vector3 {\n    return new Vector3(this.values[1], this.values[1], this.values[1]);\n  }\n\n  get xxxx(): Vector4 {\n    return new Vector4(this.values[0], this.values[0], this.values[0], this.values[0]);\n  }\n\n  get xxxy(): Vector4 {\n    return new Vector4(this.values[0], this.values[0], this.values[0], this.values[1]);\n  }\n\n  get xxyx(): Vector4 {\n    return new Vector4(this.values[0], this.values[0], this.values[1], this.values[0]);\n  }\n\n  get xxyy(): Vector4 {\n    return new Vector4(this.values[0], this.values[0], this.values[1], this.values[1]);\n  }\n\n  get xyxx(): Vector4 {\n    return new Vector4(this.values[0], this.values[1], this.values[0], this.values[0]);\n  }\n\n  get xyxy(): Vector4 {\n    return new Vector4(this.values[0], this.values[1], this.values[0], this.values[1]);\n  }\n\n  get xyyx(): Vector4 {\n    return new Vector4(this.values[0], this.values[1], this.values[1], this.values[0]);\n  }\n\n  get xyyy(): Vector4 {\n    return new Vector4(this.values[0], this.values[1], this.values[1], this.values[1]);\n  }\n\n  get yxxx(): Vector4 {\n    return new Vector4(this.values[1], this.values[0], this.values[0], this.values[0]);\n  }\n\n  get yxxy(): Vector4 {\n    return new Vector4(this.values[1], this.values[0], this.values[0], this.values[1]);\n  }\n\n  get yxyx(): Vector4 {\n    return new Vector4(this.values[1], this.values[0], this.values[1], this.values[0]);\n  }\n\n  get yxyy(): Vector4 {\n    return new Vector4(this.values[1], this.values[0], this.values[1], this.values[1]);\n  }\n\n  get yyxx(): Vector4 {\n    return new Vector4(this.values[1], this.values[1], this.values[0], this.values[0]);\n  }\n\n  get yyxy(): Vector4 {\n    return new Vector4(this.values[1], this.values[1], this.values[0], this.values[1]);\n  }\n\n  get yyyx(): Vector4 {\n    return new Vector4(this.values[1], this.values[1], this.values[1], this.values[0]);\n  }\n\n  get yyyy(): Vector4 {\n    return new Vector4(this.values[1], this.values[1], this.values[1], this.values[1]);\n  }\n\n  get r(): number {\n    return this.x;\n  }\n\n  // region getter setter\n  set r(arg: number) {\n    this.values[0] = arg;\n  }\n\n  get g(): number {\n    return this.y;\n  }\n\n  set g(arg: number) {\n    this.values[1] = arg;\n  }\n\n  get s(): number {\n    return this.x;\n  }\n\n  set s(arg: number) {\n    this.values[0] = arg;\n  }\n\n  get t(): number {\n    return this.y;\n  }\n\n  set t(arg: number) {\n    this.values[1] = arg;\n  }\n\n  get x(): number {\n    return this.values[0];\n  }\n\n  set x(arg: number) {\n    this.values[0] = arg;\n  }\n\n  get y(): number {\n    return this.values[1];\n  }\n\n  set y(arg: number) {\n    this.values[1] = arg;\n  }\n\n  get rr(): Vector2 {\n    return this.xx;\n  }\n\n  get rg(): Vector2 {\n    return this.xy;\n  }\n\n  set rg(arg: Vector2) {\n    this.xy = arg;\n  }\n\n  get gr(): Vector2 {\n    return this.yx;\n  }\n\n  set gr(arg: Vector2) {\n    this.yx = arg;\n  }\n\n  get gg(): Vector2 {\n    return this.yy;\n  }\n\n  get rrr(): Vector3 {\n    return this.xxx;\n  }\n\n  get rrg(): Vector3 {\n    return this.xxy;\n  }\n\n  get rgr(): Vector3 {\n    return this.xyx;\n  }\n\n  get rgg(): Vector3 {\n    return this.xyy;\n  }\n\n  get grr(): Vector3 {\n    return this.yxx;\n  }\n\n  get grg(): Vector3 {\n    return this.yxy;\n  }\n\n  get ggr(): Vector3 {\n    return this.yyx;\n  }\n\n  get ggg(): Vector3 {\n    return this.yyy;\n  }\n\n  get rrrr(): Vector4 {\n    return this.xxxx;\n  }\n\n  get rrrg(): Vector4 {\n    return this.xxxy;\n  }\n\n  get rrgr(): Vector4 {\n    return this.xxyx;\n  }\n\n  get rrgg(): Vector4 {\n    return this.xxyy;\n  }\n\n  get rgrr(): Vector4 {\n    return this.xyxx;\n  }\n\n  get rgrg(): Vector4 {\n    return this.xyxy;\n  }\n\n  get rggr(): Vector4 {\n    return this.xyyx;\n  }\n\n  get rggg(): Vector4 {\n    return this.xyyy;\n  }\n\n  get grrr(): Vector4 {\n    return this.yxxx;\n  }\n\n  get grrg(): Vector4 {\n    return this.yxxy;\n  }\n\n  get grgr(): Vector4 {\n    return this.yxyx;\n  }\n\n  get grgg(): Vector4 {\n    return this.yxyy;\n  }\n\n  get ggrr(): Vector4 {\n    return this.yyxx;\n  }\n\n  get ggrg(): Vector4 {\n    return this.yyxy;\n  }\n\n  get gggr(): Vector4 {\n    return this.yyyx;\n  }\n\n  get gggg(): Vector4 {\n    return this.yyyy;\n  }\n\n  get ss(): Vector2 {\n    return this.xx;\n  }\n\n  get st(): Vector2 {\n    return this.xy;\n  }\n\n  set st(arg: Vector2) {\n    this.xy = arg;\n  }\n\n  get ts(): Vector2 {\n    return this.yx;\n  }\n\n  set ts(arg: Vector2) {\n    this.yx = arg;\n  }\n\n  get tt(): Vector2 {\n    return this.yy;\n  }\n\n  get sss(): Vector3 {\n    return this.xxx;\n  }\n\n  get sst(): Vector3 {\n    return this.xxy;\n  }\n\n  get sts(): Vector3 {\n    return this.xyx;\n  }\n\n  get stt(): Vector3 {\n    return this.xyy;\n  }\n\n  get tss(): Vector3 {\n    return this.yxx;\n  }\n\n  get tst(): Vector3 {\n    return this.yxy;\n  }\n\n  get tts(): Vector3 {\n    return this.yyx;\n  }\n\n  get ttt(): Vector3 {\n    return this.yyy;\n  }\n\n  get ssss(): Vector4 {\n    return this.xxxx;\n  }\n\n  get ssst(): Vector4 {\n    return this.xxxy;\n  }\n\n  get ssts(): Vector4 {\n    return this.xxyx;\n  }\n\n  get sstt(): Vector4 {\n    return this.xxyy;\n  }\n\n  get stss(): Vector4 {\n    return this.xyxx;\n  }\n\n  get stst(): Vector4 {\n    return this.xyxy;\n  }\n\n  get stts(): Vector4 {\n    return this.xyyx;\n  }\n\n  get sttt(): Vector4 {\n    return this.xyyy;\n  }\n\n  get tsss(): Vector4 {\n    return this.yxxx;\n  }\n\n  get tsst(): Vector4 {\n    return this.yxxy;\n  }\n\n  // endregion\n\n  get tsts(): Vector4 {\n    return this.yxyx;\n  }\n\n  get tstt(): Vector4 {\n    return this.yxyy;\n  }\n\n  get ttss(): Vector4 {\n    return this.yyxx;\n  }\n\n  get ttst(): Vector4 {\n    return this.yyxy;\n  }\n\n  get ttts(): Vector4 {\n    return this.yyyx;\n  }\n\n  get tttt(): Vector4 {\n    return this.yyyy;\n  }\n\n  public get length(): number {\n    return Math.sqrt(this.squaredLength);\n  }\n\n  public get squaredLength(): number {\n    let x = this.x,\n        y = this.y;\n\n    return (x * x + y * y);\n  }\n\n  public static cross(vector: Vector2, vector2: Vector2): number {\n    return vector.x * vector2.y - vector.y * vector2.x;\n  }\n\n  public static dot(vector: Vector2, vector2: Vector2): number {\n    return vector.x * vector2.x + vector.y * vector2.y;\n  }\n\n  public static distance(vector: Vector2, vector2: Vector2): number {\n    return Math.sqrt(this.squaredDistance(vector, vector2));\n  }\n\n  public static squaredDistance(vector: Vector2, vector2: Vector2): number {\n    let x = vector2.x - vector.x,\n        y = vector2.y - vector.y;\n\n    return (x * x + y * y);\n  }\n\n  public static direction(vector: Vector2, vector2: Vector2, out?: Vector2): Vector2 {\n    if (!out) {\n      out = new Vector2();\n    }\n\n    let x = vector.x - vector2.x,\n        y = vector.y - vector2.y;\n\n    let length = Math.sqrt(x * x + y * y);\n\n    if (length === 0) {\n      out.x = 0;\n      out.y = 0;\n\n      return out;\n    }\n\n    length = 1 / length;\n\n    out.x = x * length;\n    out.y = y * length;\n\n    return out;\n  }\n\n  public static mix(vector: Vector2, vector2: Vector2, time: number, out?: Vector2): Vector2 {\n    if (!out) {\n      out = new Vector2();\n    }\n\n    let x = vector.x,\n        y = vector.y;\n\n    let x2 = vector2.x,\n        y2 = vector2.y;\n\n    out.x = x + time * (x2 - x);\n    out.y = y + time * (y2 - y);\n\n    return out;\n  }\n\n  public static sum(vector: Vector2, vector2: Vector2, out?: Vector2): Vector2 {\n    if (!out) {\n      out = new Vector2();\n    }\n\n    out.x = vector.x + vector2.x;\n    out.y = vector.y + vector2.y;\n\n    return out;\n  }\n\n  public static difference(vector: Vector2, vector2: Vector2, out?: Vector2): Vector2 {\n    if (!out) {\n      out = new Vector2();\n    }\n\n    out.x = vector.x - vector2.x;\n    out.y = vector.y - vector2.y;\n\n    return out;\n  }\n\n  public static product(vector: Vector2, vector2: Vector2, out?: Vector2): Vector2 {\n    if (!out) {\n      out = new Vector2();\n    }\n\n    out.x = vector.x * vector2.x;\n    out.y = vector.y * vector2.y;\n\n    return out;\n  }\n\n  public static quotient(vector: Vector2, vector2: Vector2, out?: Vector2): Vector2 {\n    if (!out) {\n      out = new Vector2();\n    }\n\n    out.x = vector.x / vector2.x;\n    out.y = vector.y / vector2.y;\n\n    return out;\n  }\n\n  /**\n   * Returns the minimum of two vec2's\n   *\n   * @param  a the first operand\n   * @param  b the second operand\n   * @param  out the receiving vector\n   * @returns   out\n   */\n  public static min(a: Vector2, b: Vector2, out?: Vector2) {\n    if (!out) {\n      out = new Vector2();\n    }\n    out.x = Math.min(a.x, b.x);\n    out.y = Math.min(a.y, b.y);\n    return out;\n  }\n\n  /**\n   * Returns the maximum of two vec2's\n   *\n   * @param  a the first operand\n   * @param  b the second operand\n   * @param  out the receiving vector\n   * @returns   out\n   */\n  public static max(a: Vector2, b: Vector2, out?: Vector2) {\n    out.x = Math.max(a.x, b.x);\n    out.y = Math.max(a.y, b.y);\n    return out;\n  }\n\n  public static lerp(a: Vector2, b: Vector2, t: number, out?: Vector2) {\n    if (!out) {\n      out = new Vector2();\n    }\n\n    const ax = a.x;\n    const ay = a.y;\n    out.x    = ax + t * (b.x - ax);\n    out.y    = ay + t * (b.y - ay);\n    return out;\n  }\n\n  public static angle(v1: Vector2, v2: Vector2) {\n    if (v1.values[0] === v2.values[0] && v1.values[1] === v2.values[1]) {\n      return 0;\n    }\n    const theta = Vector2.dot(v1, v2) / (v1.length * v2.length);\n    return Math.acos(Math.max(Math.min(theta, -1), 1));\n  }\n\n  public static angleSigned(v1: Vector2, v2: Vector2) {\n    if (v1.values[0] === v2.values[0] && v1.values[1] === v2.values[1]) {\n      return 0;\n    }\n    const s = Vector2.cross(v1, v2);\n    const c = Vector2.dot(v1, v2);\n    return Math.atan2(s, c);\n  }\n\n  public static zero() {\n    return new Vector2(0, 0);\n  }\n\n  public static createScaleOriginMatrix3(vector: Vector2, origin: Vector2) {\n    return Matrix3.fromTranslate(origin)\n      .multiply(Matrix3.fromScaling(vector))\n      .multiply(Matrix3.fromTranslate(origin.clone().negate()));\n  }\n\n  public static createRotateOriginMatrix3(deg: number, origin: Vector2) {\n    return Matrix3.fromTranslate(origin)\n      .multiply(new Matrix3().setRotationZ(deg))\n      .multiply(Matrix3.fromTranslate(origin.clone().negate()));\n  }\n\n  public at(index: number): number {\n    return this.values[index];\n  }\n\n  public reset(): void {\n    this.x = 0;\n    this.y = 0;\n  }\n\n  public copy(out?: Vector2): Vector2 {\n    if (!out) {\n      return new Vector2(\n        this.values[0], this.values[1]\n      );\n    }\n\n    out.x = this.x;\n    out.y = this.y;\n\n    return out;\n  }\n\n  public setValues(x: number, y: number) {\n    this.values[0] = x;\n    this.values[1] = y;\n    return this;\n  }\n\n  public setFrom(v: Vector2) {\n    this.x = v.x;\n    this.y = v.y;\n    return this;\n  }\n\n  public splat(arg: number) {\n    this.values[0] = arg;\n    this.values[1] = arg;\n    return this;\n  }\n\n  public negate(): Vector2 {\n    this.values[0] = -this.values[0];\n    this.values[1] = -this.values[1];\n    return this;\n  }\n\n  public absolute() {\n    this.values[0] = Math.abs(this.values[0]);\n    this.values[1] = Math.abs(this.values[1]);\n  }\n\n  public equals(vector: Vector2, threshold = EPSILON): boolean {\n    if (Math.abs(this.x - vector.x) > threshold) {\n      return false;\n    }\n\n    if (Math.abs(this.y - vector.y) > threshold) {\n      return false;\n    }\n\n    return true;\n  }\n\n  public add(vector: Vector2): Vector2 {\n    this.x += vector.x;\n    this.y += vector.y;\n\n    return this;\n  }\n\n  public subtract(vector: Vector2): Vector2 {\n    this.x -= vector.x;\n    this.y -= vector.y;\n\n    return this;\n  }\n\n  public multiply(vector: Vector2): Vector2 {\n    this.x *= vector.x;\n    this.y *= vector.y;\n\n    return this;\n  }\n\n  public divide(vector: Vector2): Vector2 {\n    this.x /= vector.x;\n    this.y /= vector.y;\n\n    return this;\n  }\n\n  /**\n   * Math.ceil the components of a vec2\n   *\n   * @param  out the receiving vector\n   * @returns   out\n   */\n  public ceil(out?: Vector2) {\n    if (!out) {\n      out = this;\n    }\n    out.x = Math.ceil(this.x);\n    out.y = Math.ceil(this.y);\n    return out;\n  }\n\n  /**\n   * Math.floor the components of a vec2\n   *\n   * @param  out the receiving vector\n   * @returns   out\n   */\n  public floor(out?: Vector2) {\n    if (!out) {\n      out = this;\n    }\n    out.x = Math.floor(this.x);\n    out.y = Math.floor(this.y);\n    return out;\n  }\n\n  /**\n   * Math.round the components of a vec2\n   *\n   * @param  out the receiving vector\n   * @returns   out\n   */\n  public round() {\n    this.x = Math.round(this.x);\n    this.y = Math.round(this.y);\n    return this;\n  }\n\n  public roundToZero() {\n    this.values[0] = this.values[0] < 0 ? Math.ceil(this.values[0]) : Math.floor(this.values[0]);\n    this.values[1] = this.values[1] < 0 ? Math.ceil(this.values[1]) : Math.floor(this.values[1]);\n  }\n\n  public clamp(min: Vector2, max: Vector2) {\n    this.values[0] = clamp(this.values[0], min.values[0], max.values[0]);\n    this.values[1] = clamp(this.values[1], min.values[1], max.values[1]);\n    return this;\n  }\n\n  public clampScalar(min: number, max: number) {\n    this.values[0] = clamp(this.values[0], min, max);\n    this.values[1] = clamp(this.values[1], min, max);\n    return this;\n  }\n\n  public scale(value: number, out?: Vector2): Vector2 {\n    if (!out) {\n      out = this;\n    }\n\n    out.x *= value;\n    out.y *= value;\n\n    return out;\n  }\n\n  public scaled(value: number) {\n    return this.clone().scale(value);\n  }\n\n  public normalize(out?: Vector2): Vector2 {\n    if (!out) {\n      out = this;\n    }\n\n    let length = this.length;\n    if (length === 1) {\n      return this;\n    } else if (length === 0) {\n      out.x = 0;\n      out.y = 0;\n      return out;\n    } else {\n      length = 1.0 / length;\n      out.x *= length;\n      out.y *= length;\n      return out;\n    }\n  }\n\n  public normalized() {\n    return this.clone().normalize();\n  }\n\n  public distanceTo(arg: Vector2) {\n    return Math.sqrt(this.distanceToSquared(arg));\n  }\n\n  public distanceToSquared(arg: Vector2) {\n    const dx = this.x - arg.x;\n    const dy = this.y - arg.y;\n\n    return dx * dx + dy * dy;\n  }\n\n  public angleTo(other: Vector2): number {\n    return Vector2.angle(this, other);\n  }\n\n  public angleToSigned(other: Vector2) {\n    return Vector2.angleSigned(this, other);\n  }\n\n  public dot(other: Vector2) {\n    return Vector2.dot(this, other);\n  }\n\n  public multiplyMatrix2(matrix: Matrix2, out?: Vector2): Vector2 {\n    if (!out) {\n      this.copy(out);\n    }\n\n    return matrix.transform(out);\n  }\n\n  public reflect(normal: Vector2) {\n    return this.sub(normal.scaled(2 * normal.dot(this)));\n  }\n\n  public refleted(normal: Vector2) {\n    return this.clone().reflect(normal);\n  }\n\n  /**\n   * 相对误差\n   */\n  public relativeError(correct: Vector2) {\n    const correctNorm = correct.length;\n    const diffNorm    = (this.clone().sub(correct)).length;\n    return diffNorm / correctNorm;\n  }\n\n  /**\n   * 绝对误差\n   */\n  public absoluteError(correct: Vector2) {\n    return (this.clone().sub(correct)).length;\n  }\n\n  public vertical(flag: boolean, out?: Vector2) {\n    if (!out) {\n      out = this;\n    }\n\n    const x = this.x;\n    const y = this.y;\n\n    if (flag) {\n      out.x = y;\n      out.y = -1 * x;\n    } else {\n      out.x = -1 * y;\n      out.y = x;\n    }\n\n    return out;\n  }\n\n  public clone() {\n    return this.copy();\n  }\n\n}\n\nexport interface Vector2 {\n  sub(vector: Vector2): Vector2;\n\n  mul(vector: Vector2): Vector2;\n\n  div(vector: Vector2): Vector2;\n}\n\n// tslint:disable-next-line\nVector2.prototype.sub = Vector2.prototype.subtract;\n// tslint:disable-next-line\nVector2.prototype.mul = Vector2.prototype.multiply;\n// tslint:disable-next-line\nVector2.prototype.div = Vector2.prototype.divide;","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Matrix3 } from './matrix3';\nimport { Vector2 } from './vector2';\n\nexport class Aabb2 {\n\n  constructor(min: Vector2, max: Vector2);\n\n  constructor();\n\n  constructor(min?: Vector2, max?: Vector2) {\n    if (arguments.length === 2) {\n      this._min = min;\n      this._max = max;\n    } else {\n      this._min = new Vector2();\n      this._max = new Vector2();\n    }\n  }\n\n  private readonly _min: Vector2;\n\n  public get min() {\n    return this._min;\n  }\n\n  private readonly _max: Vector2;\n\n  public get max() {\n    return this._max;\n  }\n\n  public static minMax(min: Vector2, max: Vector2) {\n    return new Aabb2(min, max);\n  }\n\n  public setCenterAndHalfExtents(center: Vector2, halfExtents: Vector2) {\n    this._min\n      .setFrom(center)\n      .subtract(halfExtents);\n\n    this._max\n      .setFrom(center)\n      .subtract(halfExtents);\n  }\n\n  public copyCenterAndHalfExtents(center: Vector2, halfExtents: Vector2) {\n    center\n      .setFrom(this._min)\n      .add(this._max)\n      .scale(0.5);\n\n    halfExtents\n      .setFrom(this._max)\n      .sub(this._min)\n      .scale(0.5);\n  }\n\n  public copy(out?: Aabb2) {\n    if (!out) {\n      out = new Aabb2();\n    }\n    out.copyFrom(this);\n    return out;\n  }\n\n  public copyFrom(other: Aabb2) {\n    this._min.setFrom(other._min);\n    this._max.setFrom(other._max);\n\n    return this;\n  }\n\n  public transform(m: Matrix3) {\n    const center      = new Vector2();\n    const halfExtents = new Vector2();\n    this.copyCenterAndHalfExtents(center, halfExtents);\n    m.transformVector2(center);\n    m.absoluteRotate2(halfExtents);\n\n    this._min\n      .setFrom(center)\n      .sub(halfExtents);\n    this._max\n      .setFrom(center)\n      .add(halfExtents);\n\n    return this;\n  }\n\n  public transformed(m: Matrix3, out: Aabb2) {\n    if (!out) {\n      out = new Aabb2();\n    }\n    out.copyFrom(this)\n      .transform(m);\n\n    return out;\n  }\n\n  public rotate(m: Matrix3) {\n    const center      = new Vector2();\n    const halfExtents = new Vector2();\n\n    this.copyCenterAndHalfExtents(center, halfExtents);\n    m.absoluteRotate2(halfExtents);\n    this._min\n      .setFrom(center)\n      .sub(halfExtents);\n    this._max\n      .setFrom(center)\n      .add(halfExtents);\n\n    return this;\n  }\n\n  public rotated(m: Matrix3) {\n    return this.clone()\n      .rotate(m);\n  }\n\n  public hull(other: Aabb2) {\n    Vector2.min(this._min, other._min, this._min);\n    Vector2.max(this._max, other._max, this._max);\n  }\n\n  public hullPoint(point: Vector2) {\n    Vector2.min(this._min, point, this._min);\n    Vector2.max(this._max, point, this._max);\n  }\n\n  public containsAabb2(other: Aabb2): boolean {\n    const otherMin = other._min;\n    const otherMax = other._max;\n\n    return (this._min.x < otherMin.x) &&\n      (this._min.y < otherMin.y) &&\n      (this._max.x > otherMax.x) &&\n      (this._max.y > otherMax.y);\n  }\n\n  public containsVector2(other: Vector2): boolean {\n    return (this._min.x < other.x) &&\n      (this._min.y < other.y) &&\n      (this._max.x > other.x) &&\n      (this._max.y > other.y);\n  }\n\n  public intersectsWithAabb2(other: Aabb2): boolean {\n    const otherMin = other._min;\n    const otherMax = other._max;\n\n    return (this._min.x <= otherMax.x) &&\n      (this._min.y <= otherMax.y) &&\n      (this._max.x >= otherMin.x) &&\n      (this._max.y >= otherMin.y);\n  }\n\n  public intersectsWithVector2(other: Vector2): boolean {\n    return (this._min.x <= other.x) &&\n      (this._min.y <= other.y) &&\n      (this._max.x >= other.x) &&\n      (this._max.y >= other.y);\n  }\n\n  public clone(): Aabb2 {\n    return this.copy();\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Vector3 } from './vector3';\n\nexport class Plane {\n  constructor(other?: Plane);\n\n  constructor(x: number, y: number, z: number, w: number);\n\n  constructor(normal: Vector3, constant: number);\n\n  constructor(x?: number | Plane | Vector3, y?: number, z?: number, w?: number) {\n    if (arguments.length === 1 && x instanceof Plane) {\n      this._normal   = x._normal.clone();\n      this._constant = x._constant;\n    } else if (arguments.length === 4) {\n      this._normal   = new Vector3(x as number, y, z);\n      this._constant = w;\n    } else if (arguments.length === 2) {\n      this._normal   = (x as Vector3).clone();\n      this._constant = (y as number);\n    } else {\n      this._normal   = new Vector3();\n      this._constant = 0;\n    }\n  }\n\n  private readonly _normal: Vector3;\n\n  public get normal() {\n    return this._normal;\n  }\n\n  private _constant: number;\n\n  public get constant() {\n    return this._constant;\n  }\n\n  public set constant(value: number) {\n    this._constant = value;\n  }\n\n  public normalize() {\n    const inverseLength = 1 / this._normal.length;\n    this._normal.scale(inverseLength);\n    this._constant *= inverseLength;\n  }\n\n  public distanceToVector3(point: Vector3) {\n    return this._normal.dot(point) + this._constant;\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Matrix4 } from './matrix4';\nimport { Vector3 } from './vector3';\n\nexport class Triangle {\n  constructor(other?: Triangle)\n\n  constructor(p0: Vector3, p1: Vector3, p2: Vector3);\n\n  constructor(p0: Vector3 | Triangle, p1?: Vector3, p2?: Vector3) {\n    if (arguments.length === 3) {\n      this._point0 = (p0 as Vector3).clone();\n      this._point1 = (p1 as Vector3).clone();\n      this._point2 = (p2 as Vector3).clone();\n    } else if (arguments.length === 1) {\n      this._point0 = (p0 as Triangle).point0;\n      this._point1 = (p0 as Triangle).point1;\n      this._point2 = (p0 as Triangle).point2;\n    } else {\n      this._point0 = Vector3.zero();\n      this._point1 = Vector3.zero();\n      this._point2 = Vector3.zero();\n    }\n  }\n\n  public _point0: Vector3;\n\n  public get point0() {\n    return this._point0;\n  }\n\n  public _point1: Vector3;\n\n  public get point1() {\n    return this._point1;\n  }\n\n  public _point2: Vector3;\n\n  public get point2() {\n    return this._point2;\n  }\n\n  public copyNormalInto(normal: Vector3) {\n    const v0: Vector3 = this._point0.clone().sub(this._point1);\n    normal\n      .setFrom(this._point2)\n      .sub(this._point1)\n      .cross(v0)\n      .normalize();\n\n    return normal;\n  }\n\n  public transform(t: Matrix4) {\n    t.transform3(this._point0);\n    t.transform3(this._point1);\n    t.transform3(this._point2);\n\n    return this;\n  }\n\n  public translate(offset: Vector3) {\n    this._point0.add(offset);\n    this._point1.add(offset);\n    this._point2.add(offset);\n\n    return this;\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nimport { IntersectionResult } from './intersection-result';\nimport { Matrix4 } from './matrix4';\nimport { Obb3 } from './obb3';\nimport { Plane } from './plane';\nimport { Quad } from './quad';\nimport { Ray } from './ray';\nimport { Sphere } from './sphere';\nimport { Triangle } from './triangle';\nimport { Vector3 } from './vector3';\n\nexport class Aabb3 {\n\n  // Avoid allocating these instance on every call to intersectsWithTriangle\n  static _quadTriangle0: Triangle = new Triangle(); // tslint:disable-line\n  static _quadTriangle1: Triangle = new Triangle(); // tslint:disable-line\n  // calculate with temp value, reduce memory;\n  private static _aabbCenter           = new Vector3();\n  private static _aabbHalfExtents      = new Vector3();\n  private static _v0: Vector3          = new Vector3();\n  private static _v1: Vector3          = new Vector3();\n  private static _v2: Vector3          = new Vector3();\n  private static _f0: Vector3          = new Vector3();\n  private static _f1: Vector3          = new Vector3();\n  private static _f2: Vector3          = new Vector3();\n  private static _trianglePlane: Plane = new Plane();\n  private static _u0: Vector3          = new Vector3([1.0, 0.0, 0.0]);\n  private static _u1: Vector3          = new Vector3([0.0, 1.0, 0.0]);\n  private static _u2: Vector3          = new Vector3([0.0, 0.0, 1.0]);\n\n  constructor(min: Vector3, max: Vector3);\n\n  constructor();\n\n  constructor(min?: Vector3, max?: Vector3) {\n    if (arguments.length === 2) {\n      this._min = min.clone();\n      this._max = max.clone();\n    } else {\n      this._min = Vector3.zero();\n      this._max = Vector3.zero();\n    }\n  }\n\n  private readonly _min: Vector3;\n\n  public get min() {\n    return this._min;\n  }\n\n  private readonly _max: Vector3;\n\n  public get max() {\n    return this._max;\n  }\n\n  public get center() {\n    return this._min.clone()\n      .add(this._max)\n      .scale(0.5);\n  }\n\n  public setCenterAndHalfExtents(center: Vector3, halfExtents: Vector3) {\n    this._min\n      .setFrom(center)\n      .sub(halfExtents);\n\n    this._max\n      .setFrom(center)\n      .add(halfExtents);\n\n    return this;\n  }\n\n  public setSphere(sphere: Sphere) {\n    this._min\n      .splat(-sphere.radius)\n      .add(sphere.center);\n    this._max\n      .splat(sphere.radius)\n      .add(sphere.center);\n\n    return this;\n  }\n\n  /// Set the AABB to enclose a [triangle].\n  public setTriangle(triangle: Triangle) {\n    this._min.setValues(\n      Math.min(triangle._point0.x,\n        Math.min(triangle._point1.x, triangle._point2.x)),\n      Math.min(triangle._point0.y,\n        Math.min(triangle._point1.y, triangle._point2.y)),\n      Math.min(triangle._point0.z,\n        Math.min(triangle._point1.z, triangle._point2.z))\n    );\n    this._max.setValues(\n      Math.max(triangle._point0.x,\n        Math.max(triangle._point1.x, triangle._point2.x)),\n      Math.max(triangle._point0.y,\n        Math.max(triangle._point1.y, triangle._point2.y)),\n      Math.max(triangle._point0.z,\n        Math.max(triangle._point1.z, triangle._point2.z))\n    );\n\n    return this;\n  }\n\n  /// Set the AABB to enclose a limited [ray] (or line segment) that is limited\n\n  /// Set the AABB to enclose a [quad].\n  public setQuad(quad: Quad) {\n    this._min.setValues(\n      Math.min(quad.point0.x,\n        Math.min(quad.point1.x, Math.min(quad.point2.x, quad.point3.x))),\n      Math.min(quad.point0.y,\n        Math.min(quad.point1.y, Math.min(quad.point2.y, quad.point3.y))),\n      Math.min(\n        quad.point0.z,\n        Math.min(\n          quad.point1.z, Math.min(quad.point2.z, quad.point3.z)))\n    );\n    this._max.setValues(\n      Math.max(quad.point0.x,\n        Math.max(quad.point1.x, Math.max(quad.point2.x, quad.point3.x))),\n      Math.max(quad.point0.y,\n        Math.max(quad.point1.y, Math.max(quad.point2.y, quad.point3.y))),\n      Math.max(\n        quad.point0.z,\n        Math.max(\n          quad.point1.z, Math.max(quad.point2.z, quad.point3.z)))\n    );\n\n    return this;\n  }\n\n  /// Set the AABB to enclose a [obb].\n  public setObb3(obb: Obb3) {\n    const corner: Vector3 = Vector3.zero();\n\n    obb.copyCorner(0, corner);\n    this._min.setFrom(corner);\n    this._max.setFrom(corner);\n\n    obb.copyCorner(1, corner);\n    this.hullPoint(corner);\n\n    obb.copyCorner(2, corner);\n    this.hullPoint(corner);\n\n    obb.copyCorner(3, corner);\n    this.hullPoint(corner);\n\n    obb.copyCorner(4, corner);\n    this.hullPoint(corner);\n\n    obb.copyCorner(5, corner);\n    this.hullPoint(corner);\n\n    obb.copyCorner(6, corner);\n    this.hullPoint(corner);\n\n    obb.copyCorner(7, corner);\n    this.hullPoint(corner);\n\n    return this;\n  }\n\n  /// by [limitMin] and [limitMax].\n  public setRay(ray: Ray, limitMin: number, limitMax: number) {\n    ray.copyAt(this._min, limitMin);\n    ray.copyAt(this._max, limitMax);\n\n    if (this._max.x < this._min.x) {\n      const temp  = this._max.x;\n      this._max.x = this._min.x;\n      this._min.x = temp;\n    }\n\n    if (this._max.y < this._min.y) {\n      const temp  = this._max.y;\n      this._max.y = this._min.y;\n      this._min.y = temp;\n    }\n\n    if (this._max.z < this._min.z) {\n      const temp  = this._max.z;\n      this._max.z = this._min.z;\n      this._min.z = temp;\n    }\n\n    return this;\n  }\n\n  /// Copy the [center] and the [halfExtends] of [this].\n  public copyCenterAndHalfExtents(center: Vector3, halfExtents: Vector3) {\n    center\n      .setFrom(this._min)\n      .add(this._max)\n      .scale(0.5);\n    halfExtents\n      .setFrom(this._max)\n      .sub(this._min)\n      .scale(0.5);\n  }\n\n  public copyCenter(center: Vector3) {\n    center\n      .setFrom(this._min)\n      .add(this._max)\n      .scale(0.5);\n  }\n\n  public copyFrom(other: Aabb3) {\n    this._min.setFrom(other._min);\n    this._max.setFrom(other._max);\n\n    return this;\n  }\n\n  /// Transform [this] by the transform [t].\n  public transform(t: Matrix4) {\n    const center: Vector3      = Vector3.zero();\n    const halfExtents: Vector3 = Vector3.zero();\n    this.copyCenterAndHalfExtents(center, halfExtents);\n    t.transform3(center);\n    t.absoluteRotate(halfExtents);\n\n    this._min\n      .setFrom(center)\n      .sub(halfExtents);\n    this._max\n      .setFrom(center)\n      .add(halfExtents);\n  }\n\n  /// Rotate [this] by the rotation matrix [t].\n  public rotate(t: Matrix4) {\n    const center: Vector3      = Vector3.zero();\n    const halfExtents: Vector3 = Vector3.zero();\n    this.copyCenterAndHalfExtents(center, halfExtents);\n    t.absoluteRotate(halfExtents);\n\n    this._min\n      .setFrom(center)\n      .sub(halfExtents);\n    this._max\n      .setFrom(center)\n      .add(halfExtents);\n  }\n\n  public transformed(t: Matrix4, out: Aabb3) {\n    out.copyFrom(this)\n      .transform(t);\n\n    return out;\n  }\n\n  /// Set the min and max of [this] so that [this] is a hull of [this] and\n\n  public rotated(t: Matrix4, out: Aabb3) {\n    out.copyFrom(this)\n      .rotate(t);\n\n    return out;\n  }\n\n  public getPN(planeNormal: Vector3, outP: Vector3, outN: Vector3) {\n    if (planeNormal.x < 0.0) {\n      outP.x = this._min.x;\n      outN.x = this._max.x;\n    } else {\n      outP.x = this._max.x;\n      outN.x = this._min.x;\n    }\n\n    if (planeNormal.y < 0.0) {\n      outP.y = this._min.y;\n      outN.y = this._max.y;\n    } else {\n      outP.y = this._max.y;\n      outN.y = this._min.y;\n    }\n\n    if (planeNormal.z < 0.0) {\n      outP.z = this._min.z;\n      outN.z = this._max.z;\n    } else {\n      outP.z = this._max.z;\n      outN.z = this._min.z;\n    }\n  }\n\n  /// [other].\n  public hull(other: Aabb3) {\n    Vector3.min(this._min, other._min, this._min);\n    Vector3.max(this._max, other._max, this._max);\n  }\n\n  /// Set the min and max of [this] so that [this] contains [point].\n  public hullPoint(point: Vector3) {\n    Vector3.min(this._min, point, this._min);\n    Vector3.max(this._max, point, this._max);\n  }\n\n  /// Return if [this] contains [other].\n  public containsAabb3(other: Aabb3) {\n    const otherMax: Vector3 = other._max;\n    const otherMin: Vector3 = other._min;\n\n    return (this._min.x < otherMin.x) &&\n      (this._min.y < otherMin.y) &&\n      (this._min.z < otherMin.z) &&\n      (this._max.x > otherMax.x) &&\n      (this._max.y > otherMax.y) &&\n      (this._max.z > otherMax.z);\n  }\n\n  /// Return if [this] contains [other].\n  public containsSphere(other: Sphere) {\n    const boxExtends: Vector3 = new Vector3(other.radius, other.radius, other.radius);\n    const sphereBox           = new Aabb3(other.center, boxExtends);\n\n    return this.containsAabb3(sphereBox);\n  }\n\n  /// Return if [this] contains [other].\n  public containsVector3(other: Vector3) {\n    return (this._min.x < other.x) &&\n      (this._min.y < other.y) &&\n      (this._min.z < other.z) &&\n      (this._max.x > other.x) &&\n      (this._max.y > other.y) &&\n      (this._max.z > other.z);\n  }\n\n  /// Return if [this] contains [other].\n  public containsTriangle(other: Triangle) {\n    return this.containsVector3(other._point0) &&\n      this.containsVector3(other._point1) &&\n      this.containsVector3(other._point2);\n  }\n\n  public intersectsWithAabb3(other: Aabb3) {\n    const otherMax = other._max;\n    const otherMin = other._min;\n\n    return (this._min.x <= otherMax.x) &&\n      (this._min.y <= otherMax.y) &&\n      (this._min.z <= otherMax.z) &&\n      (this._max.x >= otherMin.x) &&\n      (this._max.y >= otherMin.y) &&\n      (this._max.z >= otherMin.z);\n  }\n\n  public intersectsWithSphere(other: Sphere) {\n    const center = other.center;\n    const radius = other.radius;\n    let d        = 0.0;\n    let e        = 0.0;\n\n    for (let i = 0; i < 3; ++i) {\n      if ((e = center.at(i) - this._min.at(i)) < 0.0) {\n        if (e < -radius) {\n          return false;\n        }\n\n        d = d + e * e;\n      } else {\n        if ((e = center.at(i) - this._max.at(i)) > 0.0) {\n          if (e > radius) {\n            return false;\n          }\n\n          d = d + e * e;\n        }\n      }\n    }\n\n    return d <= radius * radius;\n  }\n\n  public intersectsWithVector3(other: Vector3) {\n    return (this._min.x <= other.x) &&\n      (this._min.y <= other.y) &&\n      (this._min.z <= other.z) &&\n      (this._max.x >= other.x) &&\n      (this._max.y >= other.y) &&\n      (this._max.z >= other.z);\n  }\n\n  public intersectsWithTriangle(other: Triangle, result: IntersectionResult, epsilon = 1e-3) {\n    let p0, p1, p2, r, len;\n    let a;\n    const _aabbCenter      = Aabb3._aabbCenter,\n          _aabbHalfExtents = Aabb3._aabbHalfExtents,\n          _v0              = Aabb3._v0,\n          _v1              = Aabb3._v1,\n          _v2              = Aabb3._v2,\n          _f0              = Aabb3._f0,\n          _f1              = Aabb3._f1,\n          _f2              = Aabb3._f2,\n          _trianglePlane   = Aabb3._trianglePlane,\n          _u0              = Aabb3._u0,\n          _u1              = Aabb3._u1,\n          _u2              = Aabb3._u2;\n\n    // This line isn't required if we are using center and half extents to\n    // define a aabb\n    this.copyCenterAndHalfExtents(Aabb3._aabbCenter, Aabb3._aabbHalfExtents);\n\n    // Translate triangle as conceptually moving AABB to origin\n    _v0\n      .setFrom(other.point0)\n      .sub(_aabbCenter);\n    _v1\n      .setFrom(other.point1)\n      .sub(_aabbCenter);\n    _v2\n      .setFrom(other.point2)\n      .sub(_aabbCenter);\n\n    // Translate triangle as conceptually moving AABB to origin\n    _f0\n      .setFrom(_v1)\n      .sub(_v0);\n    _f1\n      .setFrom(_v2)\n      .sub(_v1);\n    _f2\n      .setFrom(_v0)\n      .sub(_v2);\n\n    // Test axes a00..a22 (category 3)\n    // Test axis a00\n    len = _f0.y * _f0.y + _f0.z * _f0.z;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.z * _f0.y - _v0.y * _f0.z;\n      p2 = _v2.z * _f0.y - _v2.y * _f0.z;\n      r  = _aabbHalfExtents.y * Math.abs(_f0.z) + _aabbHalfExtents.z * Math.abs(_f0.y);\n      if (Math.max(-Math.max(p0, p2), Math.min(p0, p2)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p2) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u0.crossInto(_f0, result.axis);\n      }\n    }\n\n    // Test axis a01\n    len = _f1.y * _f1.y + _f1.z * _f1.z;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.z * _f1.y - _v0.y * _f1.z;\n      p1 = _v1.z * _f1.y - _v1.y * _f1.z;\n      r  = _aabbHalfExtents.y * Math.abs(_f1.z) + _aabbHalfExtents.z * Math.abs(_f1.y);\n      if (Math.max(-Math.max(p0, p1), Math.min(p0, p1)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p1) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u0.crossInto(_f1, result.axis);\n      }\n    }\n\n    // Test axis a02\n    len = _f2.y * _f2.y + _f2.z * _f2.z;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.z * _f2.y - _v0.y * _f2.z;\n      p1 = _v1.z * _f2.y - _v1.y * _f2.z;\n      r  = _aabbHalfExtents.y * Math.abs(_f2.z) + _aabbHalfExtents.z * Math.abs(_f2.y);\n      if (Math.max(-Math.max(p0, p1), Math.min(p0, p1)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p1) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u0.crossInto(_f2, result.axis);\n      }\n    }\n\n    // Test axis a10\n    len = _f0.x * _f0.x + _f0.z * _f0.z;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.x * _f0.z - _v0.z * _f0.x;\n      p2 = _v2.x * _f0.z - _v2.z * _f0.x;\n      r  = _aabbHalfExtents.x * Math.abs(_f0.z) + _aabbHalfExtents.z * Math.abs(_f0.x);\n      if (Math.max(-Math.max(p0, p2), Math.min(p0, p2)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p2) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u1.crossInto(_f0, result.axis);\n      }\n    }\n\n    // Test axis a11\n    len = _f1.x * _f1.x + _f1.z * _f1.z;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.x * _f1.z - _v0.z * _f1.x;\n      p1 = _v1.x * _f1.z - _v1.z * _f1.x;\n      r  = _aabbHalfExtents.x * Math.abs(_f1.z) + _aabbHalfExtents.z * Math.abs(_f1.x);\n      if (Math.max(-Math.max(p0, p1), Math.min(p0, p1)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p1) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u1.crossInto(_f1, result.axis);\n      }\n    }\n\n    // Test axis a12\n    len = _f2.x * _f2.x + _f2.z * _f2.z;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.x * _f2.z - _v0.z * _f2.x;\n      p1 = _v1.x * _f2.z - _v1.z * _f2.x;\n      r  = _aabbHalfExtents.x * Math.abs(_f2.z) + _aabbHalfExtents.z * Math.abs(_f2.x);\n      if (Math.max(-Math.max(p0, p1), Math.min(p0, p1)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p1) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u1.crossInto(_f2, result.axis);\n      }\n    }\n\n    // Test axis a20\n    len = _f0.x * _f0.x + _f0.y * _f0.y;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.y * _f0.x - _v0.x * _f0.y;\n      p2 = _v2.y * _f0.x - _v2.x * _f0.y;\n      r  = _aabbHalfExtents.x * Math.abs(_f0.y) + _aabbHalfExtents.y * Math.abs(_f0.x);\n      if (Math.max(-Math.max(p0, p2), Math.min(p0, p2)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p2) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u2.crossInto(_f0, result.axis);\n      }\n    }\n\n    // Test axis a21\n    len = _f1.x * _f1.x + _f1.y * _f1.y;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.y * _f1.x - _v0.x * _f1.y;\n      p1 = _v1.y * _f1.x - _v1.x * _f1.y;\n      r  = _aabbHalfExtents.x * Math.abs(_f1.y) + _aabbHalfExtents.y * Math.abs(_f1.x);\n      if (Math.max(-Math.max(p0, p1), Math.min(p0, p1)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p1) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u2.crossInto(_f1, result.axis);\n      }\n    }\n\n    // Test axis a22\n    len = _f2.x * _f2.x + _f2.y * _f2.y;\n    if (len > epsilon) {\n      // Ignore tests on degenerate axes.\n      p0 = _v0.y * _f2.x - _v0.x * _f2.y;\n      p1 = _v1.y * _f2.x - _v1.x * _f2.y;\n      r  = _aabbHalfExtents.x * Math.abs(_f2.y) + _aabbHalfExtents.y * Math.abs(_f2.x);\n      if (Math.max(-Math.max(p0, p1), Math.min(p0, p1)) > r + epsilon) {\n        return false; // Axis is a separating axis\n      }\n\n      a = Math.min(p0, p1) - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        _u2.crossInto(_f2, result.axis);\n      }\n    }\n\n    // Test the three axes corresponding to the face normals of AABB b (category 1). // Exit if...\n    // ... [-e0, e0] and [min(v0.x,v1.x,v2.x), max(v0.x,v1.x,v2.x)] do not overlap\n    if (Math.max(_v0.x, Math.max(_v1.x, _v2.x)) < -_aabbHalfExtents.x ||\n      Math.min(_v0.x, Math.min(_v1.x, _v2.x)) > _aabbHalfExtents.x) {\n      return false;\n    }\n    a = Math.min(_v0.x, Math.min(_v1.x, _v2.x)) - _aabbHalfExtents.x;\n    if (result != null && (result.depth == null || result.depth < a)) {\n      result.depth = a;\n      result.axis.setFrom(_u0);\n    }\n    // ... [-e1, e1] and [min(v0.y,v1.y,v2.y), max(v0.y,v1.y,v2.y)] do not overlap\n    if (Math.max(_v0.y, Math.max(_v1.y, _v2.y)) < -_aabbHalfExtents.y ||\n      Math.min(_v0.y, Math.min(_v1.y, _v2.y)) > _aabbHalfExtents.y) {\n      return false;\n    }\n    a = Math.min(_v0.y, Math.min(_v1.y, _v2.y)) - _aabbHalfExtents.y;\n    if (result != null && (result.depth == null || result.depth < a)) {\n      result.depth = a;\n      result.axis.setFrom(_u1);\n    }\n    // ... [-e2, e2] and [min(v0.z,v1.z,v2.z), max(v0.z,v1.z,v2.z)] do not overlap\n    if (Math.max(_v0.z, Math.max(_v1.z, _v2.z)) < -_aabbHalfExtents.z ||\n      Math.min(_v0.z, Math.min(_v1.z, _v2.z)) > _aabbHalfExtents.z) {\n      return false;\n    }\n    a = Math.min(_v0.z, Math.min(_v1.z, _v2.z)) - _aabbHalfExtents.z;\n    if (result != null && (result.depth == null || result.depth < a)) {\n      result.depth = a;\n      result.axis.setFrom(_u2);\n    }\n\n    // It seems like that wee need to move the edges before creating the\n    // plane\n    _v0.add(_aabbCenter);\n\n    // Test separating axis corresponding to triangle face normal (category 2)\n    _f0.crossInto(_f1, _trianglePlane.normal);\n    _trianglePlane.constant = _trianglePlane.normal.dot(_v0);\n    return this.intersectsWithPlane(_trianglePlane, result);\n  }\n\n  public intersectsWithPlane(other: Plane, result: IntersectionResult) {\n    // This line is not necessary with a (center, extents) AABB representation\n    this.copyCenterAndHalfExtents(Aabb3._aabbCenter, Aabb3._aabbHalfExtents);\n\n    // Compute the projection interval radius of b onto L(t) = b.c + t * p.n\n    const r = Aabb3._aabbHalfExtents.x * Math.abs(other.normal.x) +\n      Aabb3._aabbHalfExtents.y * Math.abs(other.normal.y) +\n      Aabb3._aabbHalfExtents.z * Math.abs(other.normal.z);\n    // Compute distance of box center from plane\n    const s = other.normal.dot(Aabb3._aabbCenter) - other.constant;\n    // Intersection occurs when distance s falls within [-r,+r] interval\n    if (Math.abs(s) <= r) {\n      const a = s - r;\n      if (result != null && (result.depth == null || result.depth < a)) {\n        result.depth = a;\n        result.axis.setFrom(other.normal);\n      }\n      return true;\n    }\n\n    return false;\n  }\n\n  /// Return if [this] intersects with [other].\n  /// [epsilon] allows the caller to specify a custum eplsilon value that should\n  /// be used for the test. If [result] is specified and an intersection is\n  /// found, result is modified to contain more details about the type of\n\n  /// intersection.\n  public intersectsWithQuad(other: Quad, result: IntersectionResult) {\n    other.copyTriangles(Aabb3._quadTriangle0, Aabb3._quadTriangle1);\n\n    return this.intersectsWithTriangle(Aabb3._quadTriangle0, result) ||\n      this.intersectsWithTriangle(Aabb3._quadTriangle1, result);\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nexport class Frustum {\n\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Vector3 } from './vector3';\n\n/**\n * Defines a result of an intersection test.\n */\nexport class IntersectionResult {\n  /**\n   * The penetration depth of the intersection.\n   */\n  public depth: number;\n\n  /**\n   * The [axis] of the intersection.\n   */\n  public axis = Vector3.zero();\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nimport { EPSILON } from './common';\nimport { Vector2 } from './vector2';\n\n/**\n * use row-major, because such matrix can represent as\n * ```\n *  [[1, 0],\n *   [0, 0]]\n * ```\n */\nexport class Matrix2 {\n  public static readonly dimension = 2;\n\n  private values = new Float32Array(4);\n\n  constructor(values?: number[]);\n  constructor(a11: number, a12: number,\n              a21: number, a22: number);\n  constructor(a11?: number | number[], a12?: number,\n              a21?: number, a22?: number) {\n    if (arguments.length === 1) {\n      if (a11) {\n        this.init(a11 as number[]);\n      }\n    } else if (arguments.length === 4) {\n      this.values[0] = a11 as number;\n      this.values[1] = a12;\n      this.values[2] = a21;\n      this.values[3] = a22;\n    } else {\n      this.values[0] = this.values[1] = this.values[2] = this.values[3] = 0;\n    }\n  }\n\n  public static zero() {\n    return new Matrix2(\n      0, 0,\n      0, 0\n    );\n  }\n\n  public static rotation(radians: number): Matrix2 {\n    return Matrix2.zero().setRotation(radians);\n  }\n\n  public static product(m1: Matrix2, m2: Matrix2, out: Matrix2 = null): Matrix2 {\n    const a11 = m1.at(0),\n          a12 = m1.at(1),\n          a21 = m1.at(2),\n          a22 = m1.at(3);\n\n    if (!out) {\n      out = new Matrix2();\n    }\n    out.init([\n      a11 * m2.at(0) + a12 * m2.at(2),\n      a11 * m2.at(1) + a12 * m2.at(3),\n      a21 * m2.at(0) + a22 * m2.at(2),\n      a21 * m2.at(1) + a22 * m2.at(3),\n    ]);\n\n    return out;\n  }\n\n  public static absolute(m: Matrix2, out?: Matrix2) {\n    if (!out) {\n      out = new Matrix2();\n    }\n\n    out.values[0] = Math.abs(m.at(0));\n    out.values[1] = Math.abs(m.at(1));\n    out.values[2] = Math.abs(m.at(2));\n    out.values[3] = Math.abs(m.at(3));\n\n    return out;\n  }\n\n  public at(index: number): number {\n    return this.values[index];\n  }\n\n  public init(values: number[]): Matrix2 {\n    for (let i = 0; i < 4; i++) {\n      this.values[i] = values[i];\n    }\n\n    return this;\n  }\n\n  public reset(): void {\n    for (let i = 0; i < 4; i++) {\n      this.values[i] = 0;\n    }\n  }\n\n  public copy(dest?: Matrix2): Matrix2 {\n    if (!dest) {\n      return new Matrix2(\n        this.values[0], this.values[1],\n        this.values[2], this.values[3]\n      );\n    }\n\n    for (let i = 0; i < 4; i++) {\n      dest.values[i] = this.values[i];\n    }\n\n    return dest;\n  }\n\n  public all(): number[] {\n    const data: number[] = [];\n    for (let i = 0; i < 4; i++) {\n      data[i] = this.values[i];\n    }\n\n    return data;\n  }\n\n  public copyInverse(arg: Matrix2) {\n    const det = arg.determinant();\n    if (det == 0) {\n      this.setFrom(arg);\n      return 0;\n    }\n\n    const invDet   = 1 / det;\n    const m2       = arg.values;\n    this.values[0] = m2[3] * invDet;\n    this.values[1] = -m2[1] * invDet;\n    this.values[2] = -m2[2] * invDet;\n    this.values[3] = m2[0] * invDet;\n\n    return det;\n  }\n\n  public setFrom(arg: Matrix2) {\n    this.values[3] = arg.values[3];\n    this.values[2] = arg.values[2];\n    this.values[1] = arg.values[1];\n    this.values[0] = arg.values[0];\n  }\n\n  public row(index: number): number[] {\n    return [\n      this.values[index * 2],\n      this.values[index * 2 + 1],\n    ];\n  }\n\n  public col(index: number): number[] {\n    return [\n      this.values[index],\n      this.values[index + 2],\n    ];\n  }\n\n  public index(row: number, col: number) {\n    return (row * 2) + col;\n  }\n\n  public entry(row: number, col: number) {\n    // console.assert((row >= 0) && (row < Matrix3.dimension));\n    // console.assert((col >= 0) && (col < Matrix3.dimension));\n\n    return this.values[this.index(row, col)];\n  }\n\n  public setEntry(row: number, col: number, v: number) {\n    this.values[this.index(row, col)] = v;\n\n    return this;\n  }\n\n  public setValues(arg0: number, arg1: number, arg2: number, arg3: number) {\n    this.values[0] = arg0;\n    this.values[1] = arg1;\n    this.values[2] = arg2;\n    this.values[3] = arg3;\n\n    return this;\n  }\n\n  public equals(matrix: Matrix2, threshold = EPSILON): boolean {\n    for (let i = 0; i < 4; i++) {\n      if (Math.abs(this.values[i] - matrix.at(i)) > threshold) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  public determinant(): number {\n    return this.values[0] * this.values[3] - this.values[2] * this.values[1];\n  }\n\n  public dotRow(i: number, v: Vector2) {\n    return this.values[2 * i] * v.x + this.values[(2 * i) + 1] * v.y;\n  }\n\n  public dotColumn(i: number, v: Vector2) {\n    return this.values[i] * v.x + this.values[2 + i] * v.y;\n  }\n\n  public setZero() {\n    this.values[0] = 0;\n    this.values[1] = 0;\n    this.values[2] = 0;\n    this.values[3] = 0;\n  }\n\n  /**\n   * 单位矩阵\n   *\n   * @returns\n   */\n  public setIdentity(): Matrix2 {\n    this.values[0] = 1;\n    this.values[1] = 0;\n    this.values[2] = 0;\n    this.values[3] = 1;\n\n    return this;\n  }\n\n  /**\n   * 转置当前矩阵\n   *\n   * @returns\n   */\n  public transpose(): Matrix2 {\n    const temp = this.values[1];\n\n    this.values[1] = this.values[2];\n    this.values[2] = temp;\n\n    return this;\n  }\n\n  /**\n   * 返回一个新的转置矩阵\n   *\n   * @returns\n   */\n  public transposed(): Matrix2 {\n    return this.clone().transpose();\n  }\n\n  public infinityNorm() {\n    let norm = 0;\n    {\n      let row_norm = 0;\n      row_norm += Math.abs(this.values[0]);\n      row_norm += Math.abs(this.values[2]);\n      norm         = row_norm > norm ? row_norm : norm;\n    }\n    {\n      let row_norm = 0;\n      row_norm += Math.abs(this.values[1]);\n      row_norm += Math.abs(this.values[3]);\n      norm         = row_norm > norm ? row_norm : norm;\n    }\n    return norm;\n  }\n\n  public relativeError(correct: Matrix2) {\n    const diff         = correct.clone().sub(this);\n    const correct_norm = correct.infinityNorm();\n    const diff_norm    = diff.infinityNorm();\n    return diff_norm / correct_norm;\n  }\n\n  public absoluteError(correct: Matrix2) {\n    const this_norm    = this.infinityNorm();\n    const correct_norm = correct.infinityNorm();\n    const diff_norm    = Math.abs(this_norm - correct_norm);\n    return diff_norm;\n  }\n\n  /**\n   * 计算矩阵的逆矩阵\n   * @returns\n   */\n  public inverse(): Matrix2 {\n    let det = this.determinant();\n\n    if (!det) {\n      return null;\n    }\n\n    det = 1.0 / det;\n\n    this.values[0] = det * (this.values[3]);\n    this.values[1] = det * (-this.values[1]);\n    this.values[2] = det * (-this.values[2]);\n    this.values[3] = det * (this.values[0]);\n\n    return this;\n  }\n\n  public setRotation(radians: number) {\n    const c        = Math.cos(radians);\n    const s        = Math.sin(radians);\n    this.values[0] = c;\n    this.values[1] = -s;\n    this.values[2] = s;\n    this.values[3] = c;\n\n    return this;\n  }\n\n  public scaleAdjoint(scale: number) {\n    const temp     = this.values[0];\n    this.values[0] = this.values[3] * scale;\n    this.values[1] = -this.values[1] * scale;\n    this.values[2] = -this.values[2] * scale;\n    this.values[3] = temp * scale;\n\n    return this;\n  }\n\n  public rotate(radians: number): Matrix2 {\n    const a11 = this.values[0],\n          a12 = this.values[1],\n          a21 = this.values[2],\n          a22 = this.values[3];\n\n    const sin = Math.sin(radians),\n          cos = Math.cos(radians);\n\n    this.values[0] = a11 * cos + a12 * sin;\n    this.values[1] = a11 * -sin + a12 * cos;\n    this.values[2] = a21 * cos + a22 * sin;\n    this.values[3] = a21 * -sin + a22 * cos;\n\n    return this;\n  }\n\n  public scale(scale: number): Matrix2 {\n    this.values[0] = this.values[0] * scale;\n    this.values[1] = this.values[1] * scale;\n    this.values[2] = this.values[2] * scale;\n    this.values[3] = this.values[3] * scale;\n\n    return this;\n  }\n\n  public scaled(scale: number): Matrix2 {\n    return this.clone().scale(scale);\n  }\n\n  public add(m: Matrix2) {\n    this.values[0] = this.values[0] + m.at(0);\n    this.values[1] = this.values[1] + m.at(1);\n    this.values[2] = this.values[2] + m.at(2);\n    this.values[3] = this.values[3] + m.at(3);\n\n    return this;\n  }\n\n  public sub(m: Matrix2) {\n    this.values[0] = this.values[0] - m.at(0);\n    this.values[1] = this.values[1] - m.at(1);\n    this.values[2] = this.values[2] - m.at(2);\n    this.values[3] = this.values[3] - m.at(3);\n\n    return this;\n  }\n\n  // dot\n  public multiply(m: Matrix2): Matrix2 {\n    const a11 = this.values[0],\n          a12 = this.values[1],\n          a21 = this.values[2],\n          a22 = this.values[3];\n\n    const b11 = m.at(0),\n          b12 = m.at(1),\n          b21 = m.at(2),\n          b22 = m.at(3);\n\n    this.values[0] = a11 * b11 + a12 * b21;\n    this.values[1] = a11 * b12 + a12 * b22;\n    this.values[2] = a21 * b11 + a22 * b21;\n    this.values[3] = a21 * b12 + a22 * b22;\n\n    return this;\n  }\n\n  public multiplied(m: Matrix2): Matrix2 {\n    return this.clone().multiply(m);\n  }\n\n  public transform(vector: Vector2): Vector2 {\n    const x = vector.x,\n          y = vector.y;\n\n    vector.setValues(\n      x * this.values[0] + y * this.values[1],\n      x * this.values[2] + y * this.values[3]\n    );\n\n    return vector;\n  }\n\n  public transformed(vector: Vector2, out?: Vector2): Vector2 {\n    if (!out) {\n      out = vector.clone();\n    } else {\n      vector.copy(out);\n    }\n\n    return this.transform(out);\n  }\n\n  public clone() {\n    return this.copy();\n  }\n\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\n\nimport { Aabb3 } from './aabb3';\nimport { clamp, EPSILON } from './common';\nimport { Matrix3 } from './matrix3';\nimport { Matrix4 } from './matrix4';\nimport { Triangle } from './triangle';\nimport { Vector3 } from './vector3';\n\nexport class Obb3 {\n  private static _r: Matrix3          = new Matrix3(); // tslint:disable-line\n  private static _absR: Matrix3       = new Matrix3(); // tslint:disable-line\n  private static _t: Vector3          = new Vector3(); // tslint:disable-line\n  private static _triangle: Triangle  = new Triangle(); //tslint:disable-line\n  private static _aabb3: Aabb3        = new Aabb3(); //tslint:disable-line\n  private static _zeroVector: Vector3 = Vector3.zero(); //tslint:disable-line\n  private static _vector: Vector3     = new Vector3(); //tslint:disable-line\n\n  constructor();\n\n  constructor(center: Vector3, halfExtents: Vector3,\n              axis0: Vector3, axis1: Vector3, axis2: Vector3);\n\n  constructor(center?: Vector3, halfExtents?: Vector3,\n              axis0?: Vector3, axis1?: Vector3, axis2?: Vector3) {\n    if (arguments.length === 5) {\n      this._center      = center;\n      this._halfExtents = halfExtents;\n      this._axis0       = axis0;\n      this._axis1       = axis1;\n      this._axis2       = axis2;\n    } else {\n      this._center      = Vector3.zero();\n      this._halfExtents = Vector3.zero();\n      this._axis0       = new Vector3(1, 0, 0);\n      this._axis1       = new Vector3(0, 1, 0);\n      this._axis2       = new Vector3(0, 0, 1);\n    }\n  }\n\n  private _center: Vector3;\n\n  public get center() {\n    return this._center;\n  }\n\n  private _halfExtents: Vector3;\n\n  public get halfExtents() {\n    return this._halfExtents;\n  }\n\n  private _axis0: Vector3;\n\n  public get axis0() {\n    return this._axis0;\n  }\n\n  private _axis1: Vector3;\n\n  public get axis1() {\n    return this._axis1;\n  }\n\n  private _axis2: Vector3;\n\n  public get axis2() {\n    return this._axis2;\n  }\n\n  public copyFrom(other: Obb3) {\n    this._center.setFrom(other._center);\n    this._halfExtents.setFrom(other._halfExtents);\n    this._axis0.setFrom(other._axis0);\n    this._axis1.setFrom(other._axis1);\n    this._axis2.setFrom(other._axis2);\n\n    return this;\n  }\n\n  public copy(other?: Obb3) {\n    if (!other) {\n      return new Obb3(this._center, this._halfExtents, this._axis0, this._axis1, this._axis2);\n    }\n\n    other._center.setFrom(this._center);\n    other._halfExtents.setFrom(this._halfExtents);\n    other._axis0.setFrom(this._axis0);\n    other._axis1.setFrom(this._axis1);\n    other._axis2.setFrom(this._axis2);\n\n    return other;\n  }\n\n  public resetRotation() {\n    this._axis0.setValues(1.0, 0.0, 0.0);\n    this._axis1.setValues(0.0, 1.0, 0.0);\n    this._axis2.setValues(0.0, 0.0, 1.0);\n\n    return this;\n  }\n\n  public translate(offset: Vector3) {\n    this._center.add(offset);\n\n    return this;\n  }\n\n  public rotate(m: Matrix3): this {\n    m.transformVector3(this._axis0.scale(this._halfExtents.x)).normalize();\n    m.transformVector3(this._axis1.scale(this._halfExtents.y)).normalize();\n    m.transformVector3(this._axis2.scale(this._halfExtents.z)).normalize();\n\n    this._halfExtents.setValues(\n      this._axis0.length,\n      this._axis1.length,\n      this._axis2.length\n    );\n\n    return this;\n  }\n\n  public transform(m: Matrix4): this {\n    m.transform3(this._center);\n    m.rotate3(this._axis0.scale(this._halfExtents.x)).normalize();\n    m.rotate3(this._axis1.scale(this._halfExtents.y)).normalize();\n    m.rotate3(this._axis2.scale(this._halfExtents.z)).normalize();\n\n    this._halfExtents.setValues(\n      this._axis0.length,\n      this._axis1.length,\n      this._axis2.length\n    );\n\n    return this;\n  }\n\n  public copyCorner(cornerIndex: number, corner: Vector3): void {\n    corner.setFrom(this._center);\n\n    switch (cornerIndex) {\n      case 0:\n        corner.addScaled(this._axis0, -this._halfExtents.x);\n        corner.addScaled(this._axis1, -this._halfExtents.y);\n        corner.addScaled(this._axis2, -this._halfExtents.z);\n        break;\n      case 1:\n        corner.addScaled(this._axis0, -this._halfExtents.x);\n        corner.addScaled(this._axis1, -this._halfExtents.y);\n        corner.addScaled(this._axis2, this._halfExtents.z);\n        break;\n      case 2:\n        corner.addScaled(this._axis0, -this._halfExtents.x);\n        corner.addScaled(this._axis1, this._halfExtents.y);\n        corner.addScaled(this._axis2, -this._halfExtents.z);\n        break;\n      case 3:\n        corner.addScaled(this._axis0, -this._halfExtents.x);\n        corner.addScaled(this._axis1, this._halfExtents.y);\n        corner.addScaled(this._axis2, this._halfExtents.z);\n        break;\n      case 4:\n        corner.addScaled(this._axis0, this._halfExtents.x);\n        corner.addScaled(this._axis1, -this._halfExtents.y);\n        corner.addScaled(this._axis2, -this._halfExtents.z);\n        break;\n      case 5:\n        corner.addScaled(this._axis0, this._halfExtents.x);\n        corner.addScaled(this._axis1, -this._halfExtents.y);\n        corner.addScaled(this._axis2, this._halfExtents.z);\n        break;\n      case 6:\n        corner.addScaled(this._axis0, this._halfExtents.x);\n        corner.addScaled(this._axis1, this._halfExtents.y);\n        corner.addScaled(this._axis2, -this._halfExtents.z);\n        break;\n      case 7:\n        corner.addScaled(this._axis0, this._halfExtents.x);\n        corner.addScaled(this._axis1, this._halfExtents.y);\n        corner.addScaled(this._axis2, this._halfExtents.z);\n        break;\n    }\n  }\n\n  public closestPointTo(p: Vector3, q: Vector3): this {\n    const d: Vector3 = p.clone().sub(this._center);\n    q.setFrom(this._center);\n\n    let dist;\n    dist = Vector3.dot(d, this._axis0);\n    dist = clamp(dist, -this._halfExtents.x, this._halfExtents.x);\n    q.addScaled(this._axis0, dist);\n\n    dist = Vector3.dot(d, this._axis1);\n    dist = clamp(dist, -this._halfExtents.y, this._halfExtents.y);\n    q.addScaled(this._axis1, dist);\n\n    dist = Vector3.dot(d, this._axis2);\n    dist = clamp(dist, -this._halfExtents.z, this._halfExtents.z);\n    q.addScaled(this._axis2, dist);\n\n    return this;\n  }\n\n  // public intersectsWithTriangle(other: Triangle, result: IntersectionResult) {\n  //   Obb3._triangle.copyFrom(other);\n  //\n  //   Obb3._triangle.point0\n  //     .sub(this._center)\n  //     .setValues(\n  //       Obb3._triangle.point0.dot(this._axis0),\n  //       Obb3._triangle.point0.dot(this._axis1),\n  //       Obb3._triangle.point0.dot(this._axis2)\n  //     );\n  //\n  //   Obb3._triangle.point1\n  //     .sub(this._center)\n  //     .setValues(\n  //       Obb3._triangle.point1.dot(this._axis0),\n  //       Obb3._triangle.point1.dot(this._axis1),\n  //       Obb3._triangle.point1.dot(this._axis2)\n  //     );\n  //\n  //   Obb3._triangle.point2\n  //     .sub(this._center)\n  //     .setValues(\n  //       Obb3._triangle.point2.dot(this._axis0),\n  //       Obb3._triangle.point2.dot(this._axis1),\n  //       Obb3._triangle.point2.dot(this._axis2)\n  //     );\n  //\n  //   Obb3._aabb3.setCenterAndHalfExtents(Obb3._zeroVector, this._halfExtents);\n  //\n  //   return Obb3._aabb3.intersectsWithTriangle(Obb3._triangle, result);\n  // }\n\n  public intersectsWithObb3(other: Obb3, epsilon = EPSILON) {\n    Obb3._r.setValues(\n      this._axis0.dot(other._axis0), this._axis0.dot(other._axis1), this._axis0.dot(other._axis2),\n      this._axis1.dot(other._axis0), this._axis1.dot(other._axis1), this._axis1.dot(other._axis2),\n      this._axis2.dot(other._axis0), this._axis2.dot(other._axis1), this._axis2.dot(other._axis2)\n    );\n\n    Obb3._t\n      .setFrom(other._center)\n      .sub(this._center);\n\n    Obb3._t\n      .setValues(Obb3._t.dot(this._axis0), Obb3._t.dot(this._axis1), Obb3._t.dot(this._axis2));\n\n    for (let i = 0; i < 3; i++) {\n      for (let j = 0; j < 3; j++) {\n        Obb3._absR.setEntry(i, j, Math.abs(Obb3._r.entry(i, j)) + epsilon);\n      }\n    }\n\n    let ra, rb;\n\n    // Test axes L = A0, L = A1, L = A2\n    for (let i = 0; i < 3; i++) {\n      ra = this._halfExtents.at(i);\n      rb = other._halfExtents.at(0) * Obb3._absR.entry(i, 0) +\n        other._halfExtents.at(1) * Obb3._absR.entry(i, 1) +\n        other._halfExtents.at(2) * Obb3._absR.entry(i, 2);\n\n      if (Math.abs(Obb3._t.at(i)) > ra + rb) {\n        return false;\n      }\n    }\n\n    // Test axes L = B0, L = B1, L = B2\n    for (let i = 0; i < 3; i++) {\n      ra = this._halfExtents.at(0) * Obb3._absR.entry(0, i) +\n        this._halfExtents.at(1) * Obb3._absR.entry(1, i) +\n        this._halfExtents.at(2) * Obb3._absR.entry(2, i);\n      rb = other._halfExtents.at(i);\n\n      if (Math.abs(Obb3._t.at(0) * Obb3._r.entry(0, i) +\n          Obb3._t.at(1) * Obb3._r.entry(1, i) +\n          Obb3._t.at(2) * Obb3._r.entry(2, i)) >\n        ra + rb) {\n        return false;\n      }\n    }\n\n    // Test axis L = A0 x B0\n    ra = this._halfExtents.at(1) * Obb3._absR.entry(2, 0) +\n      this._halfExtents.at(2) * Obb3._absR.entry(1, 0);\n    rb = other._halfExtents.at(1) * Obb3._absR.entry(0, 2) +\n      other._halfExtents.at(2) * Obb3._absR.entry(0, 1);\n    if (Math.abs(\n      Obb3._t.at(2) * Obb3._r.entry(1, 0) - Obb3._t.at(1) * Obb3._r.entry(2, 0)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A0 x B1\n    ra = this._halfExtents.at(1) * Obb3._absR.entry(2, 1) +\n      this._halfExtents.at(2) * Obb3._absR.entry(1, 1);\n    rb = other._halfExtents.at(0) * Obb3._absR.entry(0, 2) +\n      other._halfExtents.at(2) * Obb3._absR.entry(0, 0);\n    if (Math.abs(\n      Obb3._t.at(2) * Obb3._r.entry(1, 1) - Obb3._t.at(1) * Obb3._r.entry(2, 1)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A0 x B2\n    ra = this._halfExtents.at(1) * Obb3._absR.entry(2, 2) +\n      this._halfExtents.at(2) * Obb3._absR.entry(1, 2);\n    rb = other._halfExtents.at(0) * Obb3._absR.entry(0, 1) +\n      other._halfExtents.at(1) * Obb3._absR.entry(0, 0);\n    if (Math.abs(\n      Obb3._t.at(2) * Obb3._r.entry(1, 2) - Obb3._t.at(1) * Obb3._r.entry(2, 2)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A1 x B0\n    ra = this._halfExtents.at(0) * Obb3._absR.entry(2, 0) +\n      this._halfExtents.at(2) * Obb3._absR.entry(0, 0);\n    rb = other._halfExtents.at(1) * Obb3._absR.entry(1, 2) +\n      other._halfExtents.at(2) * Obb3._absR.entry(1, 1);\n    if (Math.abs(\n      Obb3._t.at(0) * Obb3._r.entry(2, 0) - Obb3._t.at(2) * Obb3._r.entry(0, 0)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A1 x B1\n    ra = this._halfExtents.at(0) * Obb3._absR.entry(2, 1) +\n      this._halfExtents.at(2) * Obb3._absR.entry(0, 1);\n    rb = other._halfExtents.at(0) * Obb3._absR.entry(1, 2) +\n      other._halfExtents.at(2) * Obb3._absR.entry(1, 0);\n    if (Math.abs(\n      Obb3._t.at(0) * Obb3._r.entry(2, 1) - Obb3._t.at(2) * Obb3._r.entry(0, 1)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A1 x B2\n    ra = this._halfExtents.at(0) * Obb3._absR.entry(2, 2) +\n      this._halfExtents.at(2) * Obb3._absR.entry(0, 2);\n    rb = other._halfExtents.at(0) * Obb3._absR.entry(1, 1) +\n      other._halfExtents.at(1) * Obb3._absR.entry(1, 0);\n    if (Math.abs(\n      Obb3._t.at(0) * Obb3._r.entry(2, 2) - Obb3._t.at(2) * Obb3._r.entry(0, 2)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A2 x B0\n    ra = this._halfExtents.at(0) * Obb3._absR.entry(1, 0) +\n      this._halfExtents.at(1) * Obb3._absR.entry(0, 0);\n    rb = other._halfExtents.at(1) * Obb3._absR.entry(2, 2) +\n      other._halfExtents.at(2) * Obb3._absR.entry(2, 1);\n    if (Math.abs(\n      Obb3._t.at(1) * Obb3._r.entry(0, 0) - Obb3._t.at(0) * Obb3._r.entry(1, 0)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A2 x B1\n    ra = this._halfExtents.at(0) * Obb3._absR.entry(1, 1) +\n      this._halfExtents.at(1) * Obb3._absR.entry(0, 1);\n    rb = other._halfExtents.at(0) * Obb3._absR.entry(2, 2) +\n      other._halfExtents.at(2) * Obb3._absR.entry(2, 0);\n    if (Math.abs(\n      Obb3._t.at(1) * Obb3._r.entry(0, 1) - Obb3._t.at(0) * Obb3._r.entry(1, 1)) > ra + rb) {\n      return false;\n    }\n\n    // Test axis L = A2 x B2\n    ra = this._halfExtents.at(0) * Obb3._absR.entry(1, 2) +\n      this._halfExtents.at(1) * Obb3._absR.entry(0, 2);\n    rb = other._halfExtents.at(0) * Obb3._absR.entry(2, 1) +\n      other._halfExtents.at(1) * Obb3._absR.entry(2, 0);\n    if (Math.abs(\n      Obb3._t.at(1) * Obb3._r.entry(0, 2) - Obb3._t.at(0) * Obb3._r.entry(1, 2)) > ra + rb) {\n      return false;\n    }\n\n    // Since no separating axis is found, the OBBs must be intersecting\n    return true;\n\n  }\n\n  public intersectsWithVector3(other: Vector3) {\n    Obb3._vector.setFrom(other)\n      .sub(this._center)\n      .setValues(Obb3._vector.dot(this._axis0), Obb3._vector.dot(this._axis1),\n        Obb3._vector.dot(this._axis2));\n\n    Obb3._aabb3.setCenterAndHalfExtents(Obb3._zeroVector, this._halfExtents);\n\n    return Obb3._aabb3.intersectsWithVector3(Obb3._vector);\n  }\n\n  // private static _quadTriangle0: Triangle = new Triangle();\n  // private static _quadTriangle1: Triangle = new Triangle();\n  //\n  // public intersectsWithQuad(other: Quad, result: IntersectionResult) {\n  //   other.copyTriangles(_quadTriangle0, _quadTriangle1);\n  //\n  //   return this.intersectsWithTriangle(_quadTriangle0, result: result) ||\n  //   this.intersectsWithTriangle(_quadTriangle1, result: result);\n  // }\n\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Matrix4 } from './matrix4';\nimport { Triangle } from './triangle';\nimport { Vector3 } from './vector3';\n\nexport class Quad {\n  constructor(\n    private _point0: Vector3,\n    private _point1: Vector3,\n    private _point2: Vector3,\n    private _point3: Vector3\n  ) {\n  }\n\n  public get point0() {\n    return this._point0;\n  }\n\n  public get point1() {\n    return this._point1;\n  }\n\n  public get point2() {\n    return this._point2;\n  }\n\n  public get point3() {\n    return this._point3;\n  }\n\n  public static copy(other: Quad) {\n    return new Quad(\n      other._point0,\n      other._point1,\n      other._point2,\n      other._point3\n    );\n  }\n\n  public static points(point0: Vector3, point1: Vector3, point2: Vector3, point3: Vector3) {\n    return new Quad(\n      point0.clone(),\n      point1.clone(),\n      point2.clone(),\n      point3.clone()\n    );\n  }\n\n  public copyFrom(other: Quad) {\n    this._point0.setFrom(other._point0);\n    this._point1.setFrom(other._point1);\n    this._point2.setFrom(other._point2);\n    this._point3.setFrom(other._point3);\n\n    return this;\n  }\n\n  public copyNormalInto(normal: Vector3) {\n    const v0: Vector3 = this._point0.clone().sub(this._point1);\n    normal\n      .setFrom(this._point2)\n      .sub(this._point1)\n      .cross(v0)\n      .normalize();\n  }\n\n  /// Copies the two triangles that define [this].\n  public copyTriangles(triangle0: Triangle, triangle1: Triangle) {\n    triangle0._point0.setFrom(this._point0);\n    triangle0._point1.setFrom(this._point1);\n    triangle0._point2.setFrom(this._point2);\n    triangle1._point0.setFrom(this._point0);\n    triangle1._point1.setFrom(this._point3);\n    triangle1._point2.setFrom(this._point2);\n  }\n\n  /// Transform [this] by the transform [t].\n  public transform(t: Matrix4) {\n    t.transform3(this._point0);\n    t.transform3(this._point1);\n    t.transform3(this._point2);\n    t.transform3(this._point3);\n\n    return this;\n  }\n\n  /// Translate [this] by [offset].\n  public translate(offset: Vector3) {\n    this._point0.add(offset);\n    this._point1.add(offset);\n    this._point2.add(offset);\n    this._point3.add(offset);\n\n    return this;\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Vector3 } from './vector3';\n\nexport class Ray {\n  constructor(private _origin: Vector3    = new Vector3(),\n              private _direction: Vector3 = new Vector3()) {\n  }\n\n  public get origin() {\n    return this._origin;\n  }\n\n  public get direction() {\n    return this._direction;\n  }\n\n  public static copy(other: Ray) {\n    return new Ray(\n      other._origin.clone(),\n      other._direction.clone()\n    );\n  }\n\n  public static originDirection(origin: Vector3, direction: Vector3) {\n    return new Ray(\n      origin.clone(),\n      direction.clone()\n    );\n  }\n\n  public copyFrom(other: Ray) {\n    this._origin.setFrom(other._origin);\n    this._direction.setFrom(other._direction);\n  }\n\n  public at(t: number) {\n    this._direction.scaled(t);\n    this._direction.add(this._origin);\n  }\n\n  public copyAt(other: Vector3, t: number) {\n    other\n      .setFrom(this._direction)\n      .scale(t)\n      .add(this._origin);\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Vector3 } from './vector3';\n\nexport class Sphere {\n  private _center: Vector3;\n\n  public get center() {\n    return this._center;\n  }\n\n  private _radius: number;\n\n  public get radius() {\n    return this._radius;\n  }\n\n  public set radius(value) {\n    this._radius = value;\n  }\n\n  public copyFrom(other: Sphere) {\n    this._center = other._center;\n    this._radius = other._radius;\n\n    return this;\n  }\n\n  public containsVector3(other: Vector3): boolean {\n    return other.distanceToSquared(this._center) < this._radius * this._radius;\n  }\n\n  public intersectsWithVector3(other: Vector3): boolean {\n    return other.distanceToSquared(this._center) <= this._radius * this._radius;\n  }\n\n  public intersectsWithSphere(other: Sphere): boolean {\n    const radiusSum = this._radius + other._radius;\n\n    return other._center.distanceToSquared(this._center) <= (radiusSum * radiusSum);\n  }\n\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\nimport { Vector2 } from './vector2';\n\n\nexport class BezierCurve2 {\n  point0: Vector2;\n  point1: Vector2;\n  point2: Vector2;\n  point3: Vector2;\n\n  constructor() {\n  }\n\n  getPoints() {\n    return [\n      this.point0,\n      this.point1,\n      this.point2,\n      this.point3,\n    ];\n  }\n\n  getSource(): Vector2 {\n    return this.point0;\n  }\n\n  getSourceControl(): Vector2 {\n    return this.point1;\n  }\n\n  getTargetControl(): Vector2 {\n    return this.point2;\n  }\n\n  getTarget(): Vector2 {\n    return this.point3;\n  }\n\n  setSource(point: Vector2) {\n    this.point0 = point;\n  }\n\n  setSourceControl(point: Vector2) {\n    this.point1 = point;\n  }\n\n  setTargetControl(point: Vector2) {\n    this.point2 = point;\n  }\n\n  setTarget(point: Vector2) {\n    this.point3 = point;\n  }\n}\n","// Legendre-Gauss abscissae (xi values, defined at i=n as the roots of the nth order Legendre polynomial Pn(x))\nexport const tValues = [\n  [],\n  [],\n  [\n    -0.5773502691896257645091487805019574556476,\n    0.5773502691896257645091487805019574556476\n  ],\n  [\n    0,\n    -0.7745966692414833770358530799564799221665,\n    0.7745966692414833770358530799564799221665\n  ],\n  [\n    -0.3399810435848562648026657591032446872005,\n    0.3399810435848562648026657591032446872005,\n    -0.8611363115940525752239464888928095050957,\n    0.8611363115940525752239464888928095050957\n  ],\n  [\n    0,\n    -0.5384693101056830910363144207002088049672,\n    0.5384693101056830910363144207002088049672,\n    -0.9061798459386639927976268782993929651256,\n    0.9061798459386639927976268782993929651256\n  ],\n  [\n    0.6612093864662645136613995950199053470064,\n    -0.6612093864662645136613995950199053470064,\n    -0.2386191860831969086305017216807119354186,\n    0.2386191860831969086305017216807119354186,\n    -0.9324695142031520278123015544939946091347,\n    0.9324695142031520278123015544939946091347\n  ],\n  [\n    0,\n    0.4058451513773971669066064120769614633473,\n    -0.4058451513773971669066064120769614633473,\n    -0.7415311855993944398638647732807884070741,\n    0.7415311855993944398638647732807884070741,\n    -0.9491079123427585245261896840478512624007,\n    0.9491079123427585245261896840478512624007\n  ],\n  [\n    -0.1834346424956498049394761423601839806667,\n    0.1834346424956498049394761423601839806667,\n    -0.5255324099163289858177390491892463490419,\n    0.5255324099163289858177390491892463490419,\n    -0.7966664774136267395915539364758304368371,\n    0.7966664774136267395915539364758304368371,\n    -0.9602898564975362316835608685694729904282,\n    0.9602898564975362316835608685694729904282\n  ],\n  [\n    0,\n    -0.8360311073266357942994297880697348765441,\n    0.8360311073266357942994297880697348765441,\n    -0.9681602395076260898355762029036728700494,\n    0.9681602395076260898355762029036728700494,\n    -0.3242534234038089290385380146433366085719,\n    0.3242534234038089290385380146433366085719,\n    -0.6133714327005903973087020393414741847857,\n    0.6133714327005903973087020393414741847857\n  ],\n  [\n    -0.1488743389816312108848260011297199846175,\n    0.1488743389816312108848260011297199846175,\n    -0.4333953941292471907992659431657841622,\n    0.4333953941292471907992659431657841622,\n    -0.6794095682990244062343273651148735757692,\n    0.6794095682990244062343273651148735757692,\n    -0.8650633666889845107320966884234930485275,\n    0.8650633666889845107320966884234930485275,\n    -0.9739065285171717200779640120844520534282,\n    0.9739065285171717200779640120844520534282\n  ],\n  [\n    0,\n    -0.2695431559523449723315319854008615246796,\n    0.2695431559523449723315319854008615246796,\n    -0.5190961292068118159257256694586095544802,\n    0.5190961292068118159257256694586095544802,\n    -0.7301520055740493240934162520311534580496,\n    0.7301520055740493240934162520311534580496,\n    -0.8870625997680952990751577693039272666316,\n    0.8870625997680952990751577693039272666316,\n    -0.9782286581460569928039380011228573907714,\n    0.9782286581460569928039380011228573907714\n  ],\n  [\n    -0.1252334085114689154724413694638531299833,\n    0.1252334085114689154724413694638531299833,\n    -0.3678314989981801937526915366437175612563,\n    0.3678314989981801937526915366437175612563,\n    -0.587317954286617447296702418940534280369,\n    0.587317954286617447296702418940534280369,\n    -0.7699026741943046870368938332128180759849,\n    0.7699026741943046870368938332128180759849,\n    -0.9041172563704748566784658661190961925375,\n    0.9041172563704748566784658661190961925375,\n    -0.9815606342467192506905490901492808229601,\n    0.9815606342467192506905490901492808229601\n  ],\n  [\n    0,\n    -0.2304583159551347940655281210979888352115,\n    0.2304583159551347940655281210979888352115,\n    -0.4484927510364468528779128521276398678019,\n    0.4484927510364468528779128521276398678019,\n    -0.6423493394403402206439846069955156500716,\n    0.6423493394403402206439846069955156500716,\n    -0.8015780907333099127942064895828598903056,\n    0.8015780907333099127942064895828598903056,\n    -0.9175983992229779652065478365007195123904,\n    0.9175983992229779652065478365007195123904,\n    -0.9841830547185881494728294488071096110649,\n    0.9841830547185881494728294488071096110649\n  ],\n  [\n    -0.1080549487073436620662446502198347476119,\n    0.1080549487073436620662446502198347476119,\n    -0.3191123689278897604356718241684754668342,\n    0.3191123689278897604356718241684754668342,\n    -0.5152486363581540919652907185511886623088,\n    0.5152486363581540919652907185511886623088,\n    -0.6872929048116854701480198030193341375384,\n    0.6872929048116854701480198030193341375384,\n    -0.8272013150697649931897947426503949610397,\n    0.8272013150697649931897947426503949610397,\n    -0.928434883663573517336391139377874264477,\n    0.928434883663573517336391139377874264477,\n    -0.986283808696812338841597266704052801676,\n    0.986283808696812338841597266704052801676\n  ],\n  [\n    0,\n    -0.2011940939974345223006283033945962078128,\n    0.2011940939974345223006283033945962078128,\n    -0.3941513470775633698972073709810454683627,\n    0.3941513470775633698972073709810454683627,\n    -0.5709721726085388475372267372539106412383,\n    0.5709721726085388475372267372539106412383,\n    -0.7244177313601700474161860546139380096308,\n    0.7244177313601700474161860546139380096308,\n    -0.8482065834104272162006483207742168513662,\n    0.8482065834104272162006483207742168513662,\n    -0.9372733924007059043077589477102094712439,\n    0.9372733924007059043077589477102094712439,\n    -0.9879925180204854284895657185866125811469,\n    0.9879925180204854284895657185866125811469\n  ],\n  [\n    -0.0950125098376374401853193354249580631303,\n    0.0950125098376374401853193354249580631303,\n    -0.281603550779258913230460501460496106486,\n    0.281603550779258913230460501460496106486,\n    -0.45801677765722738634241944298357757354,\n    0.45801677765722738634241944298357757354,\n    -0.6178762444026437484466717640487910189918,\n    0.6178762444026437484466717640487910189918,\n    -0.7554044083550030338951011948474422683538,\n    0.7554044083550030338951011948474422683538,\n    -0.8656312023878317438804678977123931323873,\n    0.8656312023878317438804678977123931323873,\n    -0.9445750230732325760779884155346083450911,\n    0.9445750230732325760779884155346083450911,\n    -0.9894009349916499325961541734503326274262,\n    0.9894009349916499325961541734503326274262\n  ],\n  [\n    0,\n    -0.1784841814958478558506774936540655574754,\n    0.1784841814958478558506774936540655574754,\n    -0.3512317634538763152971855170953460050405,\n    0.3512317634538763152971855170953460050405,\n    -0.5126905370864769678862465686295518745829,\n    0.5126905370864769678862465686295518745829,\n    -0.6576711592166907658503022166430023351478,\n    0.6576711592166907658503022166430023351478,\n    -0.7815140038968014069252300555204760502239,\n    0.7815140038968014069252300555204760502239,\n    -0.8802391537269859021229556944881556926234,\n    0.8802391537269859021229556944881556926234,\n    -0.9506755217687677612227169578958030214433,\n    0.9506755217687677612227169578958030214433,\n    -0.9905754753144173356754340199406652765077,\n    0.9905754753144173356754340199406652765077\n  ],\n  [\n    -0.0847750130417353012422618529357838117333,\n    0.0847750130417353012422618529357838117333,\n    -0.2518862256915055095889728548779112301628,\n    0.2518862256915055095889728548779112301628,\n    -0.4117511614628426460359317938330516370789,\n    0.4117511614628426460359317938330516370789,\n    -0.5597708310739475346078715485253291369276,\n    0.5597708310739475346078715485253291369276,\n    -0.6916870430603532078748910812888483894522,\n    0.6916870430603532078748910812888483894522,\n    -0.8037049589725231156824174550145907971032,\n    0.8037049589725231156824174550145907971032,\n    -0.8926024664975557392060605911271455154078,\n    0.8926024664975557392060605911271455154078,\n    -0.9558239495713977551811958929297763099728,\n    0.9558239495713977551811958929297763099728,\n    -0.9915651684209309467300160047061507702525,\n    0.9915651684209309467300160047061507702525\n  ],\n  [\n    0,\n    -0.1603586456402253758680961157407435495048,\n    0.1603586456402253758680961157407435495048,\n    -0.3165640999636298319901173288498449178922,\n    0.3165640999636298319901173288498449178922,\n    -0.4645707413759609457172671481041023679762,\n    0.4645707413759609457172671481041023679762,\n    -0.6005453046616810234696381649462392798683,\n    0.6005453046616810234696381649462392798683,\n    -0.7209661773352293786170958608237816296571,\n    0.7209661773352293786170958608237816296571,\n    -0.8227146565371428249789224867127139017745,\n    0.8227146565371428249789224867127139017745,\n    -0.9031559036148179016426609285323124878093,\n    0.9031559036148179016426609285323124878093,\n    -0.960208152134830030852778840687651526615,\n    0.960208152134830030852778840687651526615,\n    -0.9924068438435844031890176702532604935893,\n    0.9924068438435844031890176702532604935893\n  ],\n  [\n    -0.0765265211334973337546404093988382110047,\n    0.0765265211334973337546404093988382110047,\n    -0.227785851141645078080496195368574624743,\n    0.227785851141645078080496195368574624743,\n    -0.3737060887154195606725481770249272373957,\n    0.3737060887154195606725481770249272373957,\n    -0.5108670019508270980043640509552509984254,\n    0.5108670019508270980043640509552509984254,\n    -0.6360536807265150254528366962262859367433,\n    0.6360536807265150254528366962262859367433,\n    -0.7463319064601507926143050703556415903107,\n    0.7463319064601507926143050703556415903107,\n    -0.8391169718222188233945290617015206853296,\n    0.8391169718222188233945290617015206853296,\n    -0.9122344282513259058677524412032981130491,\n    0.9122344282513259058677524412032981130491,\n    -0.963971927277913791267666131197277221912,\n    0.963971927277913791267666131197277221912,\n    -0.9931285991850949247861223884713202782226,\n    0.9931285991850949247861223884713202782226\n  ],\n  [\n    0,\n    -0.1455618541608950909370309823386863301163,\n    0.1455618541608950909370309823386863301163,\n    -0.288021316802401096600792516064600319909,\n    0.288021316802401096600792516064600319909,\n    -0.4243421202074387835736688885437880520964,\n    0.4243421202074387835736688885437880520964,\n    -0.551618835887219807059018796724313286622,\n    0.551618835887219807059018796724313286622,\n    -0.667138804197412319305966669990339162597,\n    0.667138804197412319305966669990339162597,\n    -0.7684399634756779086158778513062280348209,\n    0.7684399634756779086158778513062280348209,\n    -0.8533633645833172836472506385875676702761,\n    0.8533633645833172836472506385875676702761,\n    -0.9200993341504008287901871337149688941591,\n    0.9200993341504008287901871337149688941591,\n    -0.9672268385663062943166222149076951614246,\n    0.9672268385663062943166222149076951614246,\n    -0.9937521706203895002602420359379409291933,\n    0.9937521706203895002602420359379409291933\n  ],\n  [\n    -0.0697392733197222212138417961186280818222,\n    0.0697392733197222212138417961186280818222,\n    -0.2078604266882212854788465339195457342156,\n    0.2078604266882212854788465339195457342156,\n    -0.3419358208920842251581474204273796195591,\n    0.3419358208920842251581474204273796195591,\n    -0.4693558379867570264063307109664063460953,\n    0.4693558379867570264063307109664063460953,\n    -0.5876404035069115929588769276386473488776,\n    0.5876404035069115929588769276386473488776,\n    -0.6944872631866827800506898357622567712673,\n    0.6944872631866827800506898357622567712673,\n    -0.7878168059792081620042779554083515213881,\n    0.7878168059792081620042779554083515213881,\n    -0.8658125777203001365364256370193787290847,\n    0.8658125777203001365364256370193787290847,\n    -0.9269567721871740005206929392590531966353,\n    0.9269567721871740005206929392590531966353,\n    -0.9700604978354287271239509867652687108059,\n    0.9700604978354287271239509867652687108059,\n    -0.994294585482399292073031421161298980393,\n    0.994294585482399292073031421161298980393\n  ],\n  [\n    0,\n    -0.1332568242984661109317426822417661370104,\n    0.1332568242984661109317426822417661370104,\n    -0.264135680970344930533869538283309602979,\n    0.264135680970344930533869538283309602979,\n    -0.390301038030290831421488872880605458578,\n    0.390301038030290831421488872880605458578,\n    -0.5095014778460075496897930478668464305448,\n    0.5095014778460075496897930478668464305448,\n    -0.6196098757636461563850973116495956533871,\n    0.6196098757636461563850973116495956533871,\n    -0.7186613631319501944616244837486188483299,\n    0.7186613631319501944616244837486188483299,\n    -0.8048884016188398921511184069967785579414,\n    0.8048884016188398921511184069967785579414,\n    -0.8767523582704416673781568859341456716389,\n    0.8767523582704416673781568859341456716389,\n    -0.9329710868260161023491969890384229782357,\n    0.9329710868260161023491969890384229782357,\n    -0.9725424712181152319560240768207773751816,\n    0.9725424712181152319560240768207773751816,\n    -0.9947693349975521235239257154455743605736,\n    0.9947693349975521235239257154455743605736\n  ],\n  [\n    -0.0640568928626056260850430826247450385909,\n    0.0640568928626056260850430826247450385909,\n    -0.1911188674736163091586398207570696318404,\n    0.1911188674736163091586398207570696318404,\n    -0.3150426796961633743867932913198102407864,\n    0.3150426796961633743867932913198102407864,\n    -0.4337935076260451384870842319133497124524,\n    0.4337935076260451384870842319133497124524,\n    -0.5454214713888395356583756172183723700107,\n    0.5454214713888395356583756172183723700107,\n    -0.6480936519369755692524957869107476266696,\n    0.6480936519369755692524957869107476266696,\n    -0.7401241915785543642438281030999784255232,\n    0.7401241915785543642438281030999784255232,\n    -0.8200019859739029219539498726697452080761,\n    0.8200019859739029219539498726697452080761,\n    -0.8864155270044010342131543419821967550873,\n    0.8864155270044010342131543419821967550873,\n    -0.9382745520027327585236490017087214496548,\n    0.9382745520027327585236490017087214496548,\n    -0.9747285559713094981983919930081690617411,\n    0.9747285559713094981983919930081690617411,\n    -0.9951872199970213601799974097007368118745,\n    0.9951872199970213601799974097007368118745\n  ]\n];\n\n// Legendre-Gauss weights (wi values, defined by a function linked to in the Bezier primer article)\nexport const cValues = [\n  [],\n  [],\n  [1.0, 1.0],\n  [\n    0.8888888888888888888888888888888888888888,\n    0.5555555555555555555555555555555555555555,\n    0.5555555555555555555555555555555555555555\n  ],\n  [\n    0.6521451548625461426269360507780005927646,\n    0.6521451548625461426269360507780005927646,\n    0.3478548451374538573730639492219994072353,\n    0.3478548451374538573730639492219994072353\n  ],\n  [\n    0.5688888888888888888888888888888888888888,\n    0.4786286704993664680412915148356381929122,\n    0.4786286704993664680412915148356381929122,\n    0.2369268850561890875142640407199173626432,\n    0.2369268850561890875142640407199173626432\n  ],\n  [\n    0.3607615730481386075698335138377161116615,\n    0.3607615730481386075698335138377161116615,\n    0.4679139345726910473898703439895509948116,\n    0.4679139345726910473898703439895509948116,\n    0.1713244923791703450402961421727328935268,\n    0.1713244923791703450402961421727328935268\n  ],\n  [\n    0.4179591836734693877551020408163265306122,\n    0.3818300505051189449503697754889751338783,\n    0.3818300505051189449503697754889751338783,\n    0.2797053914892766679014677714237795824869,\n    0.2797053914892766679014677714237795824869,\n    0.1294849661688696932706114326790820183285,\n    0.1294849661688696932706114326790820183285\n  ],\n  [\n    0.3626837833783619829651504492771956121941,\n    0.3626837833783619829651504492771956121941,\n    0.3137066458778872873379622019866013132603,\n    0.3137066458778872873379622019866013132603,\n    0.2223810344533744705443559944262408844301,\n    0.2223810344533744705443559944262408844301,\n    0.1012285362903762591525313543099621901153,\n    0.1012285362903762591525313543099621901153\n  ],\n  [\n    0.3302393550012597631645250692869740488788,\n    0.1806481606948574040584720312429128095143,\n    0.1806481606948574040584720312429128095143,\n    0.0812743883615744119718921581105236506756,\n    0.0812743883615744119718921581105236506756,\n    0.3123470770400028400686304065844436655987,\n    0.3123470770400028400686304065844436655987,\n    0.2606106964029354623187428694186328497718,\n    0.2606106964029354623187428694186328497718\n  ],\n  [\n    0.295524224714752870173892994651338329421,\n    0.295524224714752870173892994651338329421,\n    0.2692667193099963550912269215694693528597,\n    0.2692667193099963550912269215694693528597,\n    0.2190863625159820439955349342281631924587,\n    0.2190863625159820439955349342281631924587,\n    0.1494513491505805931457763396576973324025,\n    0.1494513491505805931457763396576973324025,\n    0.0666713443086881375935688098933317928578,\n    0.0666713443086881375935688098933317928578\n  ],\n  [\n    0.272925086777900630714483528336342189156,\n    0.2628045445102466621806888698905091953727,\n    0.2628045445102466621806888698905091953727,\n    0.2331937645919904799185237048431751394317,\n    0.2331937645919904799185237048431751394317,\n    0.1862902109277342514260976414316558916912,\n    0.1862902109277342514260976414316558916912,\n    0.1255803694649046246346942992239401001976,\n    0.1255803694649046246346942992239401001976,\n    0.0556685671161736664827537204425485787285,\n    0.0556685671161736664827537204425485787285\n  ],\n  [\n    0.2491470458134027850005624360429512108304,\n    0.2491470458134027850005624360429512108304,\n    0.2334925365383548087608498989248780562594,\n    0.2334925365383548087608498989248780562594,\n    0.2031674267230659217490644558097983765065,\n    0.2031674267230659217490644558097983765065,\n    0.160078328543346226334652529543359071872,\n    0.160078328543346226334652529543359071872,\n    0.1069393259953184309602547181939962242145,\n    0.1069393259953184309602547181939962242145,\n    0.047175336386511827194615961485017060317,\n    0.047175336386511827194615961485017060317\n  ],\n  [\n    0.2325515532308739101945895152688359481566,\n    0.2262831802628972384120901860397766184347,\n    0.2262831802628972384120901860397766184347,\n    0.2078160475368885023125232193060527633865,\n    0.2078160475368885023125232193060527633865,\n    0.1781459807619457382800466919960979955128,\n    0.1781459807619457382800466919960979955128,\n    0.1388735102197872384636017768688714676218,\n    0.1388735102197872384636017768688714676218,\n    0.0921214998377284479144217759537971209236,\n    0.0921214998377284479144217759537971209236,\n    0.0404840047653158795200215922009860600419,\n    0.0404840047653158795200215922009860600419\n  ],\n  [\n    0.2152638534631577901958764433162600352749,\n    0.2152638534631577901958764433162600352749,\n    0.2051984637212956039659240656612180557103,\n    0.2051984637212956039659240656612180557103,\n    0.1855383974779378137417165901251570362489,\n    0.1855383974779378137417165901251570362489,\n    0.1572031671581935345696019386238421566056,\n    0.1572031671581935345696019386238421566056,\n    0.1215185706879031846894148090724766259566,\n    0.1215185706879031846894148090724766259566,\n    0.0801580871597602098056332770628543095836,\n    0.0801580871597602098056332770628543095836,\n    0.0351194603317518630318328761381917806197,\n    0.0351194603317518630318328761381917806197\n  ],\n  [\n    0.2025782419255612728806201999675193148386,\n    0.1984314853271115764561183264438393248186,\n    0.1984314853271115764561183264438393248186,\n    0.1861610000155622110268005618664228245062,\n    0.1861610000155622110268005618664228245062,\n    0.1662692058169939335532008604812088111309,\n    0.1662692058169939335532008604812088111309,\n    0.1395706779261543144478047945110283225208,\n    0.1395706779261543144478047945110283225208,\n    0.1071592204671719350118695466858693034155,\n    0.1071592204671719350118695466858693034155,\n    0.0703660474881081247092674164506673384667,\n    0.0703660474881081247092674164506673384667,\n    0.0307532419961172683546283935772044177217,\n    0.0307532419961172683546283935772044177217\n  ],\n  [\n    0.1894506104550684962853967232082831051469,\n    0.1894506104550684962853967232082831051469,\n    0.1826034150449235888667636679692199393835,\n    0.1826034150449235888667636679692199393835,\n    0.1691565193950025381893120790303599622116,\n    0.1691565193950025381893120790303599622116,\n    0.1495959888165767320815017305474785489704,\n    0.1495959888165767320815017305474785489704,\n    0.1246289712555338720524762821920164201448,\n    0.1246289712555338720524762821920164201448,\n    0.0951585116824927848099251076022462263552,\n    0.0951585116824927848099251076022462263552,\n    0.0622535239386478928628438369943776942749,\n    0.0622535239386478928628438369943776942749,\n    0.0271524594117540948517805724560181035122,\n    0.0271524594117540948517805724560181035122\n  ],\n  [\n    0.1794464703562065254582656442618856214487,\n    0.1765627053669926463252709901131972391509,\n    0.1765627053669926463252709901131972391509,\n    0.1680041021564500445099706637883231550211,\n    0.1680041021564500445099706637883231550211,\n    0.1540457610768102880814315948019586119404,\n    0.1540457610768102880814315948019586119404,\n    0.1351363684685254732863199817023501973721,\n    0.1351363684685254732863199817023501973721,\n    0.1118838471934039710947883856263559267358,\n    0.1118838471934039710947883856263559267358,\n    0.0850361483171791808835353701910620738504,\n    0.0850361483171791808835353701910620738504,\n    0.0554595293739872011294401653582446605128,\n    0.0554595293739872011294401653582446605128,\n    0.0241483028685479319601100262875653246916,\n    0.0241483028685479319601100262875653246916\n  ],\n  [\n    0.1691423829631435918406564701349866103341,\n    0.1691423829631435918406564701349866103341,\n    0.1642764837458327229860537764659275904123,\n    0.1642764837458327229860537764659275904123,\n    0.1546846751262652449254180038363747721932,\n    0.1546846751262652449254180038363747721932,\n    0.1406429146706506512047313037519472280955,\n    0.1406429146706506512047313037519472280955,\n    0.1225552067114784601845191268002015552281,\n    0.1225552067114784601845191268002015552281,\n    0.1009420441062871655628139849248346070628,\n    0.1009420441062871655628139849248346070628,\n    0.0764257302548890565291296776166365256053,\n    0.0764257302548890565291296776166365256053,\n    0.0497145488949697964533349462026386416808,\n    0.0497145488949697964533349462026386416808,\n    0.0216160135264833103133427102664524693876,\n    0.0216160135264833103133427102664524693876\n  ],\n  [\n    0.1610544498487836959791636253209167350399,\n    0.1589688433939543476499564394650472016787,\n    0.1589688433939543476499564394650472016787,\n    0.152766042065859666778855400897662998461,\n    0.152766042065859666778855400897662998461,\n    0.1426067021736066117757461094419029724756,\n    0.1426067021736066117757461094419029724756,\n    0.1287539625393362276755157848568771170558,\n    0.1287539625393362276755157848568771170558,\n    0.1115666455473339947160239016817659974813,\n    0.1115666455473339947160239016817659974813,\n    0.0914900216224499994644620941238396526609,\n    0.0914900216224499994644620941238396526609,\n    0.0690445427376412265807082580060130449618,\n    0.0690445427376412265807082580060130449618,\n    0.0448142267656996003328381574019942119517,\n    0.0448142267656996003328381574019942119517,\n    0.0194617882297264770363120414644384357529,\n    0.0194617882297264770363120414644384357529\n  ],\n  [\n    0.1527533871307258506980843319550975934919,\n    0.1527533871307258506980843319550975934919,\n    0.1491729864726037467878287370019694366926,\n    0.1491729864726037467878287370019694366926,\n    0.1420961093183820513292983250671649330345,\n    0.1420961093183820513292983250671649330345,\n    0.1316886384491766268984944997481631349161,\n    0.1316886384491766268984944997481631349161,\n    0.118194531961518417312377377711382287005,\n    0.118194531961518417312377377711382287005,\n    0.1019301198172404350367501354803498761666,\n    0.1019301198172404350367501354803498761666,\n    0.0832767415767047487247581432220462061001,\n    0.0832767415767047487247581432220462061001,\n    0.0626720483341090635695065351870416063516,\n    0.0626720483341090635695065351870416063516,\n    0.040601429800386941331039952274932109879,\n    0.040601429800386941331039952274932109879,\n    0.0176140071391521183118619623518528163621,\n    0.0176140071391521183118619623518528163621\n  ],\n  [\n    0.1460811336496904271919851476833711882448,\n    0.1445244039899700590638271665537525436099,\n    0.1445244039899700590638271665537525436099,\n    0.1398873947910731547221334238675831108927,\n    0.1398873947910731547221334238675831108927,\n    0.132268938633337461781052574496775604329,\n    0.132268938633337461781052574496775604329,\n    0.1218314160537285341953671771257335983563,\n    0.1218314160537285341953671771257335983563,\n    0.1087972991671483776634745780701056420336,\n    0.1087972991671483776634745780701056420336,\n    0.0934444234560338615532897411139320884835,\n    0.0934444234560338615532897411139320884835,\n    0.0761001136283793020170516533001831792261,\n    0.0761001136283793020170516533001831792261,\n    0.0571344254268572082836358264724479574912,\n    0.0571344254268572082836358264724479574912,\n    0.0369537897708524937999506682993296661889,\n    0.0369537897708524937999506682993296661889,\n    0.0160172282577743333242246168584710152658,\n    0.0160172282577743333242246168584710152658\n  ],\n  [\n    0.1392518728556319933754102483418099578739,\n    0.1392518728556319933754102483418099578739,\n    0.1365414983460151713525738312315173965863,\n    0.1365414983460151713525738312315173965863,\n    0.1311735047870623707329649925303074458757,\n    0.1311735047870623707329649925303074458757,\n    0.1232523768105124242855609861548144719594,\n    0.1232523768105124242855609861548144719594,\n    0.1129322960805392183934006074217843191142,\n    0.1129322960805392183934006074217843191142,\n    0.1004141444428809649320788378305362823508,\n    0.1004141444428809649320788378305362823508,\n    0.0859416062170677274144436813727028661891,\n    0.0859416062170677274144436813727028661891,\n    0.0697964684245204880949614189302176573987,\n    0.0697964684245204880949614189302176573987,\n    0.0522933351526832859403120512732112561121,\n    0.0522933351526832859403120512732112561121,\n    0.0337749015848141547933022468659129013491,\n    0.0337749015848141547933022468659129013491,\n    0.0146279952982722006849910980471854451902,\n    0.0146279952982722006849910980471854451902\n  ],\n  [\n    0.1336545721861061753514571105458443385831,\n    0.132462039404696617371642464703316925805,\n    0.132462039404696617371642464703316925805,\n    0.1289057221880821499785953393997936532597,\n    0.1289057221880821499785953393997936532597,\n    0.1230490843067295304675784006720096548158,\n    0.1230490843067295304675784006720096548158,\n    0.1149966402224113649416435129339613014914,\n    0.1149966402224113649416435129339613014914,\n    0.1048920914645414100740861850147438548584,\n    0.1048920914645414100740861850147438548584,\n    0.0929157660600351474770186173697646486034,\n    0.0929157660600351474770186173697646486034,\n    0.0792814117767189549228925247420432269137,\n    0.0792814117767189549228925247420432269137,\n    0.0642324214085258521271696151589109980391,\n    0.0642324214085258521271696151589109980391,\n    0.0480376717310846685716410716320339965612,\n    0.0480376717310846685716410716320339965612,\n    0.0309880058569794443106942196418845053837,\n    0.0309880058569794443106942196418845053837,\n    0.0134118594871417720813094934586150649766,\n    0.0134118594871417720813094934586150649766\n  ],\n  [\n    0.1279381953467521569740561652246953718517,\n    0.1279381953467521569740561652246953718517,\n    0.1258374563468282961213753825111836887264,\n    0.1258374563468282961213753825111836887264,\n    0.121670472927803391204463153476262425607,\n    0.121670472927803391204463153476262425607,\n    0.1155056680537256013533444839067835598622,\n    0.1155056680537256013533444839067835598622,\n    0.1074442701159656347825773424466062227946,\n    0.1074442701159656347825773424466062227946,\n    0.0976186521041138882698806644642471544279,\n    0.0976186521041138882698806644642471544279,\n    0.086190161531953275917185202983742667185,\n    0.086190161531953275917185202983742667185,\n    0.0733464814110803057340336152531165181193,\n    0.0733464814110803057340336152531165181193,\n    0.0592985849154367807463677585001085845412,\n    0.0592985849154367807463677585001085845412,\n    0.0442774388174198061686027482113382288593,\n    0.0442774388174198061686027482113382288593,\n    0.0285313886289336631813078159518782864491,\n    0.0285313886289336631813078159518782864491,\n    0.0123412297999871995468056670700372915759,\n    0.0123412297999871995468056670700372915759\n  ]\n];\n\n// LUT for binomial coefficient arrays per curve order 'n'\nexport const binomialCoefficients = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]];\n","import { Vector2 } from '../vector2';\nimport { binomialCoefficients, cValues, tValues } from './bezier-values';\n\n// four points\nexport function cubicPoint(points: Vector2[], t: number): Vector2 {\n  const x =\n          (1 - t) * (1 - t) * (1 - t) * points[0].x +\n          3 * (1 - t) * (1 - t) * t * points[1].x +\n          3 * (1 - t) * t * t * points[2].x +\n          t * t * t * points[3].x;\n  const y =\n          (1 - t) * (1 - t) * (1 - t) * points[0].y +\n          3 * (1 - t) * (1 - t) * t * points[1].y +\n          3 * (1 - t) * t * t * points[2].y +\n          t * t * t * points[3].y;\n\n  return new Vector2(x, y);\n}\n\nexport function cubicDerivative(points: Vector2[], t: number) {\n  return quadraticPoint(\n    [\n      new Vector2(\n        3 * (points[1].x - points[0].x),\n        3 * (points[1].y - points[0].y),\n      ),\n      new Vector2(\n        3 * (points[2].x - points[1].x),\n        3 * (points[2].y - points[1].y)\n      ),\n      new Vector2(\n        3 * (points[3].x - points[2].x),\n        3 * (points[3].y - points[2].y)\n      ),\n    ],\n    t\n  );\n}\n\nexport function getCubicArcLength(points: Vector2[], t: number) {\n  let z: number;\n  let sum: number;\n  let correctedT: number;\n\n  /*if (xs.length >= tValues.length) {\n        throw new Error('too high n bezier');\n      }*/\n\n  const n = 20;\n\n  z   = t / 2;\n  sum = 0;\n  for (let i = 0; i < n; i++) {\n    correctedT = z * tValues[n][i] + z;\n    sum += cValues[n][i] * BFunc(points, correctedT);\n  }\n  return z * sum;\n}\n\nexport function quadraticPoint(points: Vector2[], t: number): Vector2 {\n  const x = (1 - t) * (1 - t) * points[0].x + 2 * (1 - t) * t * points[1].x + t * t * points[2].x;\n  const y = (1 - t) * (1 - t) * points[0].y + 2 * (1 - t) * t * points[1].y + t * t * points[2].y;\n  return new Vector2(x, y);\n}\n\nexport function getQuadraticArcLength(points: Vector2[], t: number): number {\n  if (t === undefined) {\n    t = 1;\n  }\n  const ax = points[0].x - 2 * points[1].x + points[2].x;\n  const ay = points[0].y - 2 * points[1].y + points[2].y;\n  const bx = 2 * points[1].x - 2 * points[0].x;\n  const by = 2 * points[1].y - 2 * points[0].y;\n\n  const A = 4 * (ax * ax + ay * ay);\n  const B = 4 * (ax * bx + ay * by);\n  const C = bx * bx + by * by;\n\n  if (A === 0) {\n    return (\n      t * Math.sqrt(Math.pow(points[2].x - points[0].x, 2) + Math.pow(points[2].y - points[0].y, 2))\n    );\n  }\n  const b = B / (2 * A);\n  const c = C / A;\n  const u = t + b;\n  const k = c - b * b;\n\n  const uuk  = u * u + k > 0 ? Math.sqrt(u * u + k) : 0;\n  const bbk  = b * b + k > 0 ? Math.sqrt(b * b + k) : 0;\n  const term =\n          b + Math.sqrt(b * b + k) !== 0\n            ? k * Math.log(Math.abs((u + uuk) / (b + bbk)))\n            : 0;\n\n  return (Math.sqrt(A) / 2) * (u * uuk - b * bbk + term);\n}\n\nexport function quadraticDerivative(points: Vector2[], t: number) {\n  return new Vector2(\n    (1 - t) * 2 * (points[1].x - points[0].x) + t * 2 * (points[2].x - points[1].x),\n    (1 - t) * 2 * (points[1].y - points[0].y) + t * 2 * (points[2].y - points[1].y),\n  );\n}\n\nfunction BFunc(points: Vector2[], t: number) {\n  const xbase    = getDerivative(1, t, points.map(it => it.x));\n  const ybase    = getDerivative(1, t, points.map(it => it.y));\n  const combined = xbase * xbase + ybase * ybase;\n  return Math.sqrt(combined);\n}\n\n/**\n * Compute the curve derivative (hodograph) at t.\n */\nconst getDerivative = (derivative: number, t: number, vs: number[]): number => {\n  // the derivative of any 't'-less function is zero.\n  const n = vs.length - 1;\n  let _vs;\n  let value;\n\n  if (n === 0) {\n    return 0;\n  }\n\n  // direct values? compute!\n  if (derivative === 0) {\n    value = 0;\n    for (let k = 0; k <= n; k++) {\n      value +=\n        binomialCoefficients[n][k] *\n        Math.pow(1 - t, n - k) *\n        Math.pow(t, k) *\n        vs[k];\n    }\n    return value;\n  } else {\n    // Still some derivative? go down one order, then try\n    // for the lower order curve's.\n    _vs = new Array(n);\n    for (let k = 0; k < n; k++) {\n      _vs[k] = n * (vs[k + 1] - vs[k]);\n    }\n    return getDerivative(derivative - 1, t, _vs);\n  }\n};\n\nexport const t2length = (\n  length: number,\n  totalLength: number,\n  func: (t: number) => number\n): number => {\n  let error = 1;\n  let t     = length / totalLength;\n  let step  = (length - func(t)) / totalLength;\n\n  let numIterations = 0;\n  while (error > 0.001) {\n    const increasedTLength = func(t + step);\n    const increasedTError  = Math.abs(length - increasedTLength) / totalLength;\n    if (increasedTError < error) {\n      error = increasedTError;\n      t += step;\n    } else {\n      const decreasedTLength = func(t - step);\n      const decreasedTError  = Math.abs(length - decreasedTLength) / totalLength;\n      if (decreasedTError < error) {\n        error = decreasedTError;\n        t -= step;\n      } else {\n        step /= 2;\n      }\n    }\n\n    numIterations++;\n    if (numIterations > 500) {\n      break;\n    }\n  }\n\n  return t;\n};\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Vector2 } from '../vector2';\n\n\nexport class Rectangle {\n\n  constructor(\n    protected _point0: Vector2,\n    protected _point1: Vector2,\n    protected _point2: Vector2,\n    protected _point3: Vector2,\n  ) {\n  }\n\n  static createFromBounds(x: number, y: number, width: number, height: number): Rectangle {\n    return new Rectangle(\n      new Vector2(x, y), new Vector2(x + width, y),\n      new Vector2(x + width, y + height), new Vector2(x, y + height)\n    );\n  }\n\n  updateDimensions(x: number, y: number, width: number, height: number) {\n    const rectangle = Rectangle.createFromBounds(x, y, width, height);\n    this._point0    = rectangle._point0;\n    this._point1    = rectangle._point1;\n    this._point2    = rectangle._point2;\n    this._point3    = rectangle._point3;\n\n    return this;\n  }\n\n  getPoints() {\n    return [\n      this._point0,\n      this._point1,\n      this._point2,\n      this._point3,\n    ];\n  }\n\n  setPoints(points: Vector2[]) {\n    if (points.length !== 4) {\n      throw 'Rectangles must always have 4 points';\n    }\n    this._point0 = points[0];\n    this._point1 = points[1];\n    this._point2 = points[2];\n    this._point3 = points[3];\n  }\n\n  containsPoint(point: Vector2) {\n    const tl = this.getTopLeft();\n    const br = this.getBottomRight();\n\n    return point.x >= tl.x && point.x <= br.x && point.y >= tl.y && point.y <= br.y;\n  }\n\n  getWidth(): number {\n    return Math.sqrt(\n      Math.pow(this.getTopLeft().x - this.getTopRight().x, 2) +\n      Math.pow(this.getTopLeft().y - this.getTopRight().y, 2)\n    );\n  }\n\n  getHeight(): number {\n    return Math.sqrt(\n      Math.pow(this.getBottomLeft().x - this.getTopLeft().x, 2) +\n      Math.pow(this.getBottomLeft().y - this.getTopLeft().y, 2)\n    );\n  }\n\n  getCenter(): Vector2 {\n    return this._vector2Middle(this.getTopLeft(), this.getBottomRight());\n  }\n\n  getTopMiddle(): Vector2 {\n    return this._vector2Middle(this.getTopLeft(), this.getTopRight());\n  }\n\n  getBottomMiddle(): Vector2 {\n    return this._vector2Middle(this.getBottomLeft(), this.getBottomRight());\n  }\n\n  getLeftMiddle(): Vector2 {\n    return this._vector2Middle(this.getBottomLeft(), this.getTopLeft());\n  }\n\n  getRightMiddle(): Vector2 {\n    return this._vector2Middle(this.getBottomRight(), this.getTopRight());\n  }\n\n  getTopLeft(): Vector2 {\n    return this._point0;\n  }\n\n  getTopRight(): Vector2 {\n    return this._point1;\n  }\n\n  getBottomRight(): Vector2 {\n    return this._point2;\n  }\n\n  getBottomLeft(): Vector2 {\n    return this._point3;\n  }\n\n  protected _vector2Middle(a: Vector2, b: Vector2) {\n    return a.clone()\n      .add(b)\n      .scale(.5);\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Matrix3 } from '../matrix3';\nimport { Vector2 } from '../vector2';\nimport { Rectangle } from './rectangle';\n\nexport class Polygon {\n  protected points: Vector2[];\n\n  constructor(points: Vector2[] = []) {\n    this.points = points;\n  }\n\n  serialize() {\n    return this.points.map((point) => {\n      return [point.x, point.y];\n    });\n  }\n\n  deserialize(data: any[]) {\n    this.points = data.map((point) => {\n      return new Vector2(point[0], point[1]);\n    });\n  }\n\n  transform(matrix: Matrix3) {\n    this.points.forEach((point) => {\n      matrix.transformVector2(point);\n    });\n  }\n\n  setPoints(points: Vector2[]) {\n    this.points = points;\n  }\n\n  getPoints(): Vector2[] {\n    return this.points;\n  }\n\n  translate(offsetX: number, offsetY: number) {\n    this.points.forEach((point) => {\n      point.add(new Vector2(offsetX, offsetY));\n    });\n  }\n\n  rotate(degrees: number, origin?: Vector2) {\n    if (!origin) {\n      origin = this.getOrigin();\n    }\n    this.transform(Vector2.createRotateOriginMatrix3(degrees / (180 / Math.PI), origin));\n  }\n\n  scale(x: number, y: number, origin: Vector2) {\n    let matrix = Vector2.createScaleOriginMatrix3(new Vector2(x, y), origin);\n\n    this.points.forEach((point) => {\n      matrix.transformVector2(point);\n      // point.transform(matrix);\n    });\n  }\n\n  doClone(ob: this) {\n    this.points = ob.points.map((point) => {\n      return point.clone();\n    });\n  }\n\n  clone(): this {\n    let ob = Object.create(this);\n    ob.doClone(this);\n    return ob;\n  }\n\n  getOrigin(): Vector2 | null {\n    if (this.points.length === 0) {\n      return null;\n    }\n    let dimensions = this.getBoundingBox();\n    return this.vector2Middle(dimensions.getTopLeft(), dimensions.getBottomRight());\n  }\n\n  vector2Middle(a: Vector2, b: Vector2) {\n    return a.clone()\n      .add(b)\n      .scale(.5);\n  }\n\n  getBoundingBox(): Rectangle {\n    let minX = this.points[0].x;\n    let maxX = this.points[0].x;\n    let minY = this.points[0].y;\n    let maxY = this.points[0].y;\n\n    for (let i = 1; i < this.points.length; i++) {\n      if (this.points[i].x < minX) {\n        minX = this.points[i].x;\n      }\n      if (this.points[i].x > maxX) {\n        maxX = this.points[i].x;\n      }\n      if (this.points[i].y < minY) {\n        minY = this.points[i].y;\n      }\n      if (this.points[i].y > maxY) {\n        maxY = this.points[i].y;\n      }\n    }\n\n    return new Rectangle(\n      new Vector2(minX, minY), new Vector2(maxX, minY),\n      new Vector2(maxX, maxY), new Vector2(minX, maxY)\n    );\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport {\n  cubicDerivative, cubicPoint, getCubicArcLength, getQuadraticArcLength, quadraticDerivative,\n  quadraticPoint, t2length\n} from '../helper/bezier-functions';\nimport { Point } from '../helper/types';\nimport { Polygon } from '../polygon/polygon';\nimport { Vector2 } from '../vector2';\n\nexport class BezierCurve {\n  protected points: Vector2[];\n\n  constructor() {\n    this.points = [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)];\n  }\n\n  public getTotalLength() {\n    const points = this._getPoints();\n    return this._getArcLength(points, 1);\n  }\n\n  public getPointAtLength(length: number) {\n    const points = this._getPoints();\n    const t      = t2length(length, this.getTotalLength(), i => this._getArcLength(points, i));\n\n    return this._getPoint(points, t);\n  }\n\n  public getTangentAtLength(length: number) {\n    const points = this._getPoints();\n    const t      = t2length(length, this.getTotalLength(), i => this._getArcLength(points, i));\n\n    const derivative = this._getDerivative(points, t);\n    const mdl        = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);\n    let tangent: Point;\n    if (mdl > 0) {\n      tangent = {x: derivative.x / mdl, y: derivative.y / mdl};\n    } else {\n      tangent = {x: 0, y: 0};\n    }\n    return tangent;\n  }\n\n  public getPropertiesAtLength(length: number) {\n    const points = this._getPoints();\n    const t      = t2length(length, this.getTotalLength(), i => this._getArcLength(points, i));\n\n    const derivative = this._getDerivative(points, t);\n    const mdl        = Math.sqrt(derivative.x * derivative.x + derivative.y * derivative.y);\n    let tangent: Point;\n    if (mdl > 0) {\n      tangent = {x: derivative.x / mdl, y: derivative.y / mdl};\n    } else {\n      tangent = {x: 0, y: 0};\n    }\n    const point = this._getPoint(points, t);\n    return {x: point.x, y: point.y, tangentX: tangent.x, tangentY: tangent.y};\n  };\n\n  _getPoints() {\n    if (this.getSourceControl().equals(this.getTargetControl())) {\n      return [this.getSource(), this.getSourceControl(), this.getTarget()];\n    } else {\n      return [this.getSource(), this.getSourceControl(), this.getTargetControl(), this.getTarget()];\n    }\n  }\n\n  _getArcLength(points: Vector2[], t: number): number {\n    if (points.length === 3) {\n      return getQuadraticArcLength(points, t);\n    }\n    return getCubicArcLength(points, t);\n  }\n\n  _getPoint(points: Vector2[], t: number): Vector2 {\n    if (points.length === 3) {\n      return quadraticPoint(points, t);\n    }\n    return cubicPoint(points, t);\n  }\n\n  _getDerivative(points: Vector2[], t: number): Vector2 {\n    if (points.length === 3) {\n      return quadraticDerivative(points, t);\n    }\n    return cubicDerivative(points, t);\n  }\n\n  getSVGCurve(): string {\n    // tslint:disable-next-line:max-line-length\n    const source        = this.getSource();\n    const sourceControl = this.getSourceControl();\n    const targetControl = this.getTargetControl();\n    const target        = this.getTarget();\n\n    // tslint:disable-next-line:max-line-length\n    return `M${source.x} ${source.y} C${sourceControl.x} ${sourceControl.y}, ${targetControl.x} ${targetControl.y}, ${target.x} ${target.y}`;\n  }\n\n  setPoints(points: Vector2[]) {\n    if (points.length !== 4) {\n      throw new Error('BezierCurve must have extactly 4 points');\n    }\n    this.points = points;\n  }\n\n  getSource(): Vector2 {\n    return this.points[0];\n  }\n\n  getSourceControl(): Vector2 {\n    return this.points[1];\n  }\n\n  getTargetControl(): Vector2 {\n    return this.points[2];\n  }\n\n  getTarget(): Vector2 {\n    return this.points[3];\n  }\n\n  setSource(point: Vector2) {\n    this.points[0] = point;\n  }\n\n  setSourceControl(point: Vector2) {\n    this.points[1] = point;\n  }\n\n  setTargetControl(point: Vector2) {\n    this.points[2] = point;\n  }\n\n  setTarget(point: Vector2) {\n    this.points[3] = point;\n  }\n\n  toPolygon() {\n    return new Polygon(this.points);\n  }\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nimport { Vector2 } from '../vector2';\nimport { Rectangle } from './rectangle';\n\nexport function boundingBoxFromPolygons(polygons: Rectangle[]): Rectangle {\n  return boundingBoxFromPoints(\n    polygons.reduce((prev, polygon) => {\n      return prev.concat([\n        polygon.getPoints()\n      ]);\n    }, [])\n  );\n}\n\nexport function boundingBoxFromPoints(points: Vector2[]): Rectangle {\n  if (points.length === 0) {\n    return Rectangle.createFromBounds(0, 0, 0, 0);\n  }\n\n  let minX = points[0].x;\n  let maxX = points[0].x;\n  let minY = points[0].y;\n  let maxY = points[0].y;\n\n  for (let i = 1; i < points.length; i++) {\n    if (points[i].x < minX) {\n      minX = points[i].x;\n    }\n    if (points[i].x > maxX) {\n      maxX = points[i].x;\n    }\n    if (points[i].y < minY) {\n      minY = points[i].y;\n    }\n    if (points[i].y > maxY) {\n      maxY = points[i].y;\n    }\n  }\n\n  return new Rectangle(\n    new Vector2(minX, minY), new Vector2(maxX, minY),\n    new Vector2(maxX, maxY), new Vector2(minX, maxY)\n  );\n}\n","/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license\n */\n\nexport * from './lib/aabb2';\nexport * from './lib/aabb3';\nexport * from './lib/frustum';\nexport * from './lib/intersection-result';\nexport * from './lib/matrix2';\nexport * from './lib/matrix3';\nexport * from './lib/matrix4';\nexport * from './lib/obb3';\nexport * from './lib/plane';\nexport * from './lib/quad';\nexport * from './lib/quaternion';\nexport * from './lib/ray';\nexport * from './lib/sphere';\nexport * from './lib/triangle';\nexport * from './lib/vector2';\nexport * from './lib/vector3';\nexport * from './lib/vector4';\n\nexport * from './lib/bezier-curve2';\n\nexport * from './lib/curve/bezier-curve';\nexport * from './lib/polygon/polygon';\nexport * from './lib/polygon/rectangle';\nexport * from './lib/polygon/polygon-helper';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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AO,IAAI,OAAO,CAAC;AACjB,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAE7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAE7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAE7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAC7C,gBAAA,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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AAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,I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A0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,yCAAyC;QACzC,yCAAyC;QACzC,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,yCAAyC;QACzC,yCAAyC;QACzC,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,yCAAyC;QACzC,yCAAyC;QACzC,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,yCAAyC;QACzC,yCAAyC;QACzC,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,yCAAyC;QACzC,yCAAyC;QACzC,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;AAC3C,KAAA;AACD,IAAA;QACE,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,yCAAyC;QACzC,yCAAyC;QACzC,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,yCAAyC;QACzC,yCAAyC;QACzC,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;QAC1C,0CAA0C;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"}