# ppb/ppb-vector

A 2D Vector class for PPB.

Language: Python

# ppb-vector

My 2D Vector class

## Usage

`Vector2` is an immutable 2D Vector. Instantiated as expected:

``````>>>> from ppb_vector import Vector2
>>> Vector2(3, 4)
Vector2(3, 4)
``````

Implements many convenience features:

``````>>> Vector2(1, 0) + Vector2(0, 1)
Vector2(1, 1)
``````

In addition to `Vector2` addition also accepts vector-like objects such as `tuple`, `list`, and `dict`.

``````>>> Vector2(1, 1) + [1, 3]
Vector2(2, 4)

>>> Vector2(1, 1) + (2, 4)
Vector2(3, 5)

>>> Vector2(1, 1) + {"x": 3, "y": 5}
Vector2(4, 6)
``````

### Subtraction

``````>>> Vector2(3, 3) - Vector2(1, 1)
Vector2(2, 2)
``````

As with addition, subtraction also takes vector-like objects.

``````>>> Vector2(3, 3) - [2, 1]
Vector2(1, 2)

>>> Vector2(3, 3) - (2, 1)
Vector2(1, 2)

>>> Vector2(3, 3) - {"x": 2, "y": 1}
Vector2(1, 2)
``````

### Equality

Vectors are equal if their members are equal.

``````>>> Vector2(1, 0) == Vector2(0, 1)
False
``````

### Scalar Multiplication

Multiply a `Vector2` by a scalar to get a scaled `Vector2`

``````>>> Vector2(1, 1) * 3
Vector2(3, 3)
``````

### Dot Product

Multiply a `Vector2` by another `Vector2` to get the dot product.

``````>>> Vector2(1, 1) * Vector2(-1, -1)
-2
``````

### Vector Length

``````>>> Vector2(45, 60).length
75.0
``````

### Access Values

Convenient access to `Vector2` members via dot notation, indexes, or keys.

``````>>> my_vector = Vector2(2, 3)
>>> my_vector.x
2
>>> my_vector
3
>>> my_vector["x"]
2
``````

Also iterable for translation between Vector2 and other sequence types.

``````>>> tuple(Vector(2, 3))
(2, 3)
``````

### Methods

Useful functions for game development.

#### rotate(deg)

Rotate a vector in relation to its own origin and return a new `Vector2`.

``````>>> Vector2(1, 0).rotate(90)
Vector2(0.0, 1.0)
``````

Positive rotation is counter/anti-clockwise.

#### normalize()

Return the normalized `Vector2` for the given `Vector2`.

``````>>> Vector2(5, 5).normalize()
Vector2(0.7071067811865475, 0.7071067811865475)
``````

#### truncate(scalar)

Scale a given `Vector2` to length of `scalar`.

``````>>> Vector2(700, 500).truncate(5)
Vector2(4.068667356033675, 2.906190968595482)
``````

Note that `Vector2.normalize()` is equivalent to `Vector2.truncate(1)`.

``````>>> Vector2(200, 300).normalize()
Vector2(0.5547001962252291, 0.8320502943378436)
>>> Vector2(200, 300).scale(1)
Vector2(0.5547001962252291, 0.8320502943378436)
``````

#### scale(scalar)

Scale given `Vector2` to length of `scalar`.

``````>>> Vector2(7, 7).scale(5)
Vector2(3.5355339059327373, 3.5355339059327373)
``````

Note that `Vector2.scale` is equivalent to `Vector2.truncate` when `scalar` is less than length.

``````>>> Vector2(3, 4).scale(4)
Vector2(2.4000000000000004, 3.2)
>>> Vector2(3, 4).truncate(4)
Vector2(2.4000000000000004, 3.2)
>>> Vector2(3, 4).scale(6)
Vector2(3.5999999999999996, 4.8)
>>> Vector2(3, 4).truncate(6)
Vector2(3, 4)
``````

#### Project Statistics

 Sourcerank 3 Repository Size 494 KB Stars 2 Forks 17 Watchers 2 Open issues 5 Dependencies 0 Contributors 1 Tags 8 Created Dec 7, 2016 Last updated Jul 7, 2019 Last pushed Jul 7, 2019

#### Top Contributors See all #### Packages Referencing this Repo

##### ppb-vector
A basic game development Vector class.
Latest release 1.0 - Updated - 2 stars

#### Recent Tags See all

 v1.0 July 07, 2019 v1.0rc1 June 26, 2019 v1.0b1 June 08, 2019 v1.0a3 June 06, 2019 v0.4.0rc1 May 25, 2019 v1.0a2 May 25, 2019 v1.0a1 April 13, 2019 v0.3 January 02, 2018