# Point and Vector¶

The two basic spatial objects are the `Point`, which represents a position in space, and the `Vector`, which represents an arrow through space.

They are instantiated with an `array_like` object, which is an object that can be passed to `numpy.array()`.

```>>> import numpy as np
>>> from skspatial.objects import Point
```
```>>> point_1 = Point([1, 2])
>>> point_2 = Point((1, 2))
>>> point_3 = Point(np.array([1, 2]))
```
```>>> np.array_equal(point_1, point_2)
True
```
```>>> np.array_equal(point_1, point_3)
True
```

`Point` and `Vector` are both subclasses of the NumPy `ndarray`, which gives them all the functionality of a regular NumPy array.

```>>> point_1
Point([1, 2])
```
```>>> point_1.size
2
```
```>>> point_1.shape
(2,)
```

The magnitude of a vector is found with the `norm()` method.

```>>> from skspatial.objects import Vector
```
```>>> vector = Vector([1, 1])
>>> vector.norm().round(3)
1.414
```

The unit vector can also be obtained.

```>>> vector_unit = vector.unit()
```
```>>> vector_unit.round(3)
Vector([0.707, 0.707])
```

One vector can be projected onto another.

```>>> vector_u = Vector([1, 0])
>>> vector_v = Vector([5, 9])
```
```>>> vector_u.project_vector(vector_v)  # Project vector v onto vector u.
Vector([5., 0.])
```