--- title: Vector slug: /vector section: Math --- ## Vectors Excalibur uses the [[Vector]] structure to represent points. The [[Vector]] class has many different static methods available for doing vector math as well as instance methods to combine vectors together in different ways. ### Creating vectors To quickly create a vector, use the [[vec]] global: ```ts import { vec } from 'excalibur' const point = vec(0, 10) ``` Alternatively, you may see examples of using the more verbose `new Vector(x, y)` format: ```ts import { Vector } from 'excalibur' const point = new Vector(0, 10) ``` To set the value of an existing vector, use [[Vector.setTo]]: ```ts import { vec } from 'excalibur' const point = vec(0, 10).setTo(10, 10) ``` There are some built-in vector constants you can use: - [[Vector.Zero]] - [[Vector.One]] - [[Vector.Half]] - [[Vector.Left]] - [[Vector.Right]] - [[Vector.Up]] - [[Vector.Down]] ### Cloning vectors Vectors are objects, so mutating them will change the state for all references. Use the [[Vector.clone]] method to clone a vector to mutate it: ```ts import { vec } from 'excalibur' const point = vec(0, 10) const samePoint = point.setTo(8, 8) const anotherPoint = point.clone().setTo(50, 50) console.log(point.toString()) // "(8, 8)" console.log(samePoint.toString()) // "(8, 8)" console.log(anotherPoint.toString()) // "(50, 50)" ``` Notice how both `point` and `samePoint` share the same vector reference, so using `setTo` mutates the vector. Use `clone` to ensure you are not changing vectors unexpectedly!