Vector2D
- class pygamelib.base.Vector2D(row=0.0, column=0.0)
Bases:
object
A 2D vector class.
New in version 1.2.0.
Contrary to the rest of the library Vector2D uses floating point numbers for its coordinates/direction/orientation. However since the rest of the library uses integers, the numbers are rounded to 2 decimals. You can alter that behavior by increasing or decreasing the rounding_precision parameter (if you want integer for example).
Vector2D use the row/column internal naming convention as it is easier to visualize for developers that are still learning python or the pygamelib. If it is a concept that you already understand and are more familiar with the x/y coordinate system you can also use x and y.
x is equivalent to column
y is equivalent to row
Everything else is the same.
Vectors can be printed and supports basic operations:
addition
substraction
multiplication
Let’s elaborate a bit more on the multiplication. The product behaves in 2 different ways:
If you multiply a vector with a scalar (int or float), the return value is a Vector2D with each vector component multiplied by said scalar.
If you multiply a Vector2D with another Vector2D you ask for the the cross product of vectors. This is an undefined mathematical operation in 2D as the cross product is supposed to be perpendicular to the 2 other vectors (along the z axis in our case). Since we don’t have depth (z) in 2D, this will return the magnitude of the signed cross product of the 2 vectors.
Example of products:
v1 = base.Vector2D(1,2) v2 = base.Vector2D(3,4) # This returns -2 mag = v1 * v2 # This returns a Vector2D with values (-1, -2) inv = v1 * -1 # This return a Vector2D with values (2.85, 3.8) or 95% of v2 dim = v2 * 0.95
- Parameters:
row (int) – The row/y parameter.
column (int) – The column/x parameter.
Example:
gravity = Vector2D(9.81, 0) # Remember that minus on row is up. speed = Vector2D(-0.123, 0.456) # In that case you might want to increase the rounding precision speed.rounding_precision = 3
- __init__(row=0.0, column=0.0)
Methods
__init__
([row, column])from_direction
(direction, step)Build and return a Vector2D from a direction.
length
()Returns the length of a vector.
load
(data)Loads a vector from a dictionary.
Returns a dictionary with the attributes of the vector.
unit
()Returns a normalized unit vector.
Attributes
The column component of the vector.
The row component of the vector.
x is an alias for column.
y is an alias for row.
The rounding_precision attributes is used when vectors values are calculated and the result rounded for convenience.
- property column
The column component of the vector.
- classmethod from_direction(direction: Direction, step)
Build and return a Vector2D from a direction.
Directions are from the constants module.
- Parameters:
direction (
Direction
) – A direction from the constants module.step (int) – The number of cell to cross in one movement.
Example:
v2d_up = Vector2D.from_direction(Direction.UP, 1)
- length()
Returns the length of a vector.
- Return type:
float
Example:
if speed.length() == 0.0: print('We are not moving... at all...')
- classmethod load(data)
Loads a vector from a dictionary.
New in version 1.3.0.
- Parameters:
data (dict) – A dictionary with the attributes of the vector.
- Returns:
A vector.
- Return type:
Example:
gravity_dict = {"row": 9.81, "column": 0} gravity = Vector2D.load(gravity_dict)
- rounding_precision
The rounding_precision attributes is used when vectors values are calculated and the result rounded for convenience. It can be changed anytime to increase or decrease the precision anytime.
- property row
The row component of the vector.
- serialize()
Returns a dictionary with the attributes of the vector.
New in version 1.3.0.
- Returns:
A dictionary with the attributes of the vector.
- Return type:
dict
Example:
gravity = Vector2D(9.81, 0) gravity_dict = gravity.serialize() print(gravity_dict)
- unit()
Returns a normalized unit vector.
- Returns:
A unit vector
- Return type:
Example:
gravity = Vector2D(9.81, 0) next_position = item.position_as_vector() + gravity.unit()
- property x
x is an alias for column.
- property y
y is an alias for row.