pymunk.vec2d Module

This module contain the Vec2d class that is used in all of pymunk when a vector is needed.

The Vec2d class is used almost everywhere in pymunk for 2d coordinates and vectors, for example to define gravity vector in a space. However, pymunk is smart enough to convert tuples or tuple like objects to Vec2ds so you usually do not need to explicitly do conversions if you happen to have a tuple:

>>> import pymunk
>>> space = pymunk.Space()
>>> space.gravity
Vec2d(0.0, 0.0)
>>> space.gravity = 3,5
>>> space.gravity
Vec2d(3.0, 5.0)
>>> space.gravity += 2,6
>>> space.gravity
Vec2d(5.0, 11.0)

More examples:

>>> from pymunk.vec2d import Vec2d
>>> Vec2d(7.3, 4.2)
Vec2d(7.3, 4.2)
>>> Vec2d(7.3, 4.2) + Vec2d(1, 2)
Vec2d(8.3, 6.2)
class pymunk.vec2d.Vec2d(x: float, y: float)[source]

Bases: NamedTuple

2d vector class, supports vector and scalar operators, and also provides some high level functions.

__abs__() float[source]

Return the length of the Vec2d

>>> abs(Vec2d(3,4))
5.0
__add__(other: Tuple[float, float]) Vec2d[source]

Add a Vec2d with another Vec2d or Tuple of size 2

>>> Vec2d(3,4) + Vec2d(1,2)
Vec2d(4, 6)
>>> Vec2d(3,4) + (1,2)
Vec2d(4, 6)
__floordiv__(other: float) Vec2d[source]

Floor division by a float (also known as integer division)

>>> Vec2d(3,6) // 2.0
Vec2d(1.0, 3.0)
__mul__(other: float) Vec2d[source]

Multiply with a float

>>> Vec2d(3,6) * 2.5
Vec2d(7.5, 15.0)
__neg__() Vec2d[source]

Return the negated version of the Vec2d

>>> -Vec2d(1,-2)
Vec2d(-1, 2)
__pos__() Vec2d[source]

Return the unary pos of the Vec2d.

>>> +Vec2d(1,-2)
Vec2d(1, -2)
__sub__(other: Tuple[float, float]) Vec2d[source]

Subtract a Vec2d with another Vec2d or Tuple of size 2

>>> Vec2d(3,4) - Vec2d(1,2)
Vec2d(2, 2)
>>> Vec2d(3,4) - (1,2)
Vec2d(2, 2)
__truediv__(other: float) Vec2d[source]

Division by a float

>>> Vec2d(3,6) / 2.0
Vec2d(1.5, 3.0)
property angle: float

The angle (in radians) of the vector

property angle_degrees: float

Gets the angle (in degrees) of a vector

convert_to_basis(x_vector: Tuple[float, float], y_vector: Tuple[float, float]) Vec2d[source]
cpvrotate(other: Tuple[float, float]) Vec2d[source]

Uses complex multiplication to rotate this vector by the other.

cpvunrotate(other: Tuple[float, float]) Vec2d[source]

The inverse of cpvrotate

cross(other: Tuple[float, float]) float[source]
The cross product between the vector and other vector

v1.cross(v2) -> v1.x*v2.y - v1.y*v2.x

Returns:

The cross product

dot(other: Tuple[float, float]) float[source]
The dot product between the vector and other vector

v1.dot(v2) -> v1.x*v2.x + v1.y*v2.y

Returns:

The dot product

get_angle_between(other: Tuple[float, float]) float[source]

Get the angle between the vector and the other in radians

Returns:

The angle

get_angle_degrees_between(other: Vec2d) float[source]

Get the angle between the vector and the other in degrees

Returns:

The angle (in degrees)

get_dist_sqrd(other: Tuple[float, float]) float[source]

The squared distance between the vector and other vector It is more efficent to use this method than to call get_distance() first and then do a sqrt() on the result.

Returns:

The squared distance

get_distance(other: Tuple[float, float]) float[source]

The distance between the vector and other vector

Returns:

The distance

get_length_sqrd() float[source]

Get the squared length of the vector. If the squared length is enough it is more efficient to use this method instead of first calling get_length() or access .length and then do a x**2.

>>> v = Vec2d(3,4)
>>> v.get_length_sqrd() == v.length**2
True
Returns:

The squared length

property int_tuple: Tuple[int, int]

The x and y values of this vector as a tuple of ints. Uses round() to round to closest int.

>>> Vec2d(0.9, 2.4).int_tuple
(1, 2)
interpolate_to(other: Tuple[float, float], range: float) Vec2d[source]
property length: float

Get the length of the vector.

>>> Vec2d(10, 0).length
10.0
>>> '%.2f' % Vec2d(10, 20).length
'22.36'
Returns:

The length

normalized() Vec2d[source]

Get a normalized copy of the vector Note: This function will return 0 if the length of the vector is 0.

Returns:

A normalized vector

normalized_and_length() Tuple[Vec2d, float][source]

Normalize the vector and return its length before the normalization

Returns:

The length before the normalization

static ones() Vec2d[source]

A vector where both x and y is 1

>>> Vec2d.ones()
Vec2d(1, 1)
perpendicular() Vec2d[source]
perpendicular_normal() Vec2d[source]
projection(other: Tuple[float, float]) Vec2d[source]

Project this vector on top of other vector

rotated(angle_radians: float) Vec2d[source]

Create and return a new vector by rotating this vector by angle_radians radians.

Returns:

Rotated vector

rotated_degrees(angle_degrees: float) Vec2d[source]

Create and return a new vector by rotating this vector by angle_degrees degrees.

Returns:

Rotade vector

scale_to_length(length: float) Vec2d[source]

Return a copy of this vector scaled to the given length.

>>> '%.2f, %.2f' % Vec2d(10, 20).scale_to_length(20)
'8.94, 17.89'
static unit() Vec2d[source]

A unit vector pointing up

>>> Vec2d.unit()
Vec2d(0, 1)
x: float

Alias for field number 0

y: float

Alias for field number 1

static zero() Vec2d[source]

A vector of zero length.

>>> Vec2d.zero()
Vec2d(0, 0)