# c4d.Vector¶

class `c4d.``Vector`
Single precision vector mathematics.

A vector class represents a point, a color, a direction, an HPB-angle or a simple coordinate in a 3D space using the Cartesian coordinates x, y and z. The values are stored in the members x, y and z.

For example, positions are stored in the order (X position; Y position; Z position) and rotations in the order (H angle; P angle; B angle).

Cinema 4D also uses vectors to store colors and their values of an RGB (Red, Green, Blue) color model.
The vector class can also represent a direction, an arrow pointing from the origin of the coordinates, such as (0,0,0), to an endpoint3.

Note

Cinema 4D uses a left-handed coordinate system.

Warning

The `Vector` type does not support the function copy.copy(), please use the `Vector` copy constructor instead.

```>>> import c4d
>>> import copy

>>> # A vector and its Python object id.
>>> vec = c4d.Vector(1)
>>> id(vec), vec
(1331515356992, Vector(1, 1, 1))

>>> # We are only creating a reference to the same object.
>>> ref = vec
>>> id(ref), ref
(1331515356992, Vector(1, 1, 1))

>>> # Cinema's types usually do not work with Python's copy module.
>>> copy.deepcopy(vec)
...
TypeError: can't pickle c4d.Vector objects.

>>> # But we can copy objects via copy constructors.
>>> copy = c4d.Vector(vec)
>>> id(copy), copy
(1331515387904, Vector(1, 1, 1))
```

Attributes

`Vector.``x`

X component of the vector.

Type: float

`Vector.``y`

Y component of the vector.

Type: float

`Vector.``z`

Z component of the vector.

Type: float

Methods Signatures

 `Vector.__init__(self[, x, y, z])` Initializes a new `Vector`. `Vector.__str__(self)` Returns a string representation of the vector. `Vector.__hash__(self)` Returns the hash code of the vector used for hash maps and comparisons. `Vector.__getitem__(self, key)` Retrieves the value of the x, y or z component of the vector. `Vector.__setitem__(self, key, value)` Assigns a value to the x, y or z component of the vector. `Vector.__del__(self)` Not implemented. `Vector.__add__(self, other)` Adds an operand to the vector. `Vector.__radd__(self, other)` Adds the vector to an operand. `Vector.__sub__(self, other)` Subtracts an operand from the vector. `Vector.__rsub__(self, other)` Subtracts the vector from an operand. `Vector.__mul__(self, other)` Calculates the product of the vector and an left-side operand. `Vector.__rmul__(self, other)` Calculates the product of the vector and a right-side operand. `Vector.__div__(self, other)` Divides each vector component by a scalar. `Vector.__rdiv__(self, other)` Not implemented. `Vector.__mod__(self, other)` Calculates the cross product of the vector and an operand. `Vector.__xor__(self, other)` Calculates an alternative product operation of the vector and a left-side operand. `Vector.__rxor__(self, other)` Not implemented. `Vector.__abs__(self)` Returns a vector with the absolute (positive) value of each component. `Vector.__neg__(self)` Returns the inverse of the vector. `Vector.__invert__(self)` Returns the normalized vector. `Vector.__eq__(self, other)` Checks if two vectors are equal. `Vector.__ne__(self, other)` Check if two vectors are not equal. `Vector.__ge__(self, other)` Not implemented. `Vector.__gt__(self, other)` Not implemented. `Vector.__le__(self, other)` Not implemented. `Vector.__lt__(self, other)` Not implemented.
 `Vector.GetHashCode(self)` Returns the hash code of the vector used for hash maps and comparisons. `Vector.IsEqual(self, other, epsilon)` Tests component-wise if the difference is no bigger than ‘epsilon’. `Vector.IsZero(self[, epsilon])` Checks if each component is zero. `Vector.SetZero(self)` Sets all components to zero. `Vector.GetAverage(self)` Calculates the average value of ‘x’, ‘y’ and ‘z’. `Vector.GetSum(self)` Calculates the sum of ‘x’, ‘y’ and ‘z’. `Vector.ClampMin(self, other)` Set the minimum of each component. `Vector.ClampMax(self, other)` Set the maximum of each component. `Vector.Clamp01(self)` Returns a vector that is clamped to the range [0.0 .. 1.0]. `Vector.GetLength(self)` Calculates the length of the vector. `Vector.GetLengthSquared(self)` Calculates the squared length of the vector. `Vector.GetSquaredLength(self)` Returns the squared length of the vector. `Vector.GetNormalized(self)` Calculates the normalized vector, so that `GetLength()` returns 1.0. `Vector.Normalize(self)` Normalizes the vector, so that `GetLength()` returns 1.0. `Vector.GetMin(self)` Returns the minimum of ‘x’, ‘y’ and ‘z’. `Vector.GetMax(self)` Returns the maximum of ‘x’, ‘y’ and ‘z’. `Vector.GetRightRotated(self, rots)` Returns a vector where the components have been rotated to the right (in the usual (x, y, z)-representation). `Vector.Dot(self, v2)` Calculates the dot product of the vector and vector v2. `Vector.Abs(self)` Returns the vector with absolute value for each entry `Vector.Min(self, other)` Calculates the minimum of each component. `Vector.Max(self, other)` Calculates the maximum of each component. `Vector.SetMin(self, other)` Set the minimum of each component. `Vector.SetMax(self, other)` Set the maximum of each component. `Vector.GetAngle(self, other)` Calculates angle (in radians) between v1 and v2. `Vector.Cross(self, v2)` Calculates the cross product of the vector and vector v2.

Static Methods Signatures

 `c4d.Vector.GetDistance(v1, v2)` Retrieve the distance between two vectors.

Methods Documentation

`Vector.``__init__`(self, x=0.0, y=0.0, z=0.0)
Initializes a new `Vector`.

All arguments are optional so it is possible to create a new vector without any arguments. All components are simply 0.
Otherwise x can be a `Vector` so all components of the passed vector will be copied to the new vector.
If only a number is passed, all components will be set to this.
```>>> c4d.Vector()
Vector(0,0,0)

>>> c4d.Vector(100)
Vector(100,100,100)

>>> v = c4d.Vector(100, 100, 100)
>>> c4d.Vector(v)
Vector(100,100,100)

>>> c4d.Vector(1, 2, 3)
Vector(1,2,3)
```
Parameters
• x (Optional[Union[int, float, c4d.Vector]]) – If x is a number and is the only passed argument, set this to all components. If x is a vector, clone it. Otherwise set the X component.

• y (Optional[Union[int, float]]) – Set the Y component.

• z (Optional[Union[int, float]]) – Set the Z component.

`Vector.``__str__`(self)
Returns a string representation of the vector.

Called if str() is invoked on a vector object. See object.__str__() for more information on Python’s data model.
```>>> c4d.Vector(30, 40, 2)
Vector(30.0, 40.0, 2.0)
```
Return type

str

Returns

The Vector as string.

`Vector.``__hash__`(self)

Returns the hash code of the vector used for hash maps and comparisons.

New in version S26.

Returns

The vector’s hash code.

Return type

int

`Vector.``__getitem__`(self, key)
Retrieves the value of the x, y or z component of the vector.

The component is identified by an index in the interval [0, 2].

New in version R14.014.

```>>> v = c4d.Vector(1, 2, 3)
>>> v[0]
1.0
>>> v[1]
2.0
>>> v[2]
3.0
```
Parameters

key (int) – The component index.

Raises

IndexError – When key does not satisfy 0 <= key < 2.

Return type

float

Returns

The vector component.

`Vector.``__setitem__`(self, key, value)
Assigns a value to the x, y or z component of the vector.

The component is identified by an index in the interval [0, 2].

New in version R14.014.

```>>> v = c4d.Vector(1, 2, 3)
>>> v[0] = 0
>>> v
Vector(0, 2, 3)
```
Parameters
• key (int) – The component index.

• value (Union[float, int]) – The new vector component.

Raises

IndexError – When key does not satisfy 0 <= key < 2.

`Vector.``__del__`(self)

Not implemented.

Note

The `Vector` does not support item deletion, e.g., by calling del(v[0]).

Raise

TypeError.

`Vector.``__add__`(self, other)

Adds an operand to the vector.

```>>> c4d.Vector(1, 2, 3) + 1
Vector(2,3,4)

>>> c4d.Vector(1, 2, 3) + c4d.Vector(2, 3, 4)
Vector(3,5,7)
```
Parameters

other (Union[c4d.Vector, int, float]) – The other operand.

Return type

c4d.Vector

Returns

The resulting vector.

`Vector.``__radd__`(self, other)

Adds the vector to an operand.

```>>> 1 + c4d.Vector(1, 2, 3)
Vector(2,3,4)

>>> c4d.Vector(1, 2, 3) + c4d.Vector(2, 3, 4)
Vector(3,5,7)
```
Parameters

other (Union[c4d.Vector, int, float]) – The other operand.

Return type

c4d.Vector

Returns

The resulting vector.

`Vector.``__sub__`(self, other)

Subtracts an operand from the vector.

```>>> c4d.Vector(1, 2, 3) - 1
Vector(0,1,2)

c4d.Vector(1, 2, 3) - c4d.Vector(2, 3, 4)
Vector(-1,-1,-1)
```
Parameters

other (Union[c4d.Vector, int, float]) – The other operand.

Return type

c4d.Vector

Returns

The resulting vector.

`Vector.``__rsub__`(self, other)

Subtracts the vector from an operand.

```>>> 1 - c4d.Vector(1, 2, 3)
Vector(0,-1,-2)

>>> c4d.Vector(1, 2, 3) - c4d.Vector(2, 3, 4)
Vector(-1,-1,-1)
```
Parameters

other (Union[c4d.Vector, int, float]) – The other operand.

Return type

c4d.Vector

Returns

The resulting vector.

`Vector.``__mul__`(self, other)
Calculates the product of the vector and an left-side operand.

If other is a float, it multiplies each vector component by the scalar.
If other is a vector, calculates the dot product of the vectors.
If other is a matrix, the vector is transformed by it, including translations.

`Vector.__xor__()` is the operator implementation for alternative product operations.

```>>> u = c4d.Vector(1, 0, 0)
>>> v = c4d.Vector(2, 0, 0)

>>> # A transform rotating by 90° ccw and translating by 100 units on v3 (i.e., the
>>> # z-axis, the basis vector k).
>>> M = c4d.Matrix(v1=c4d.Vector( 0, 1, 0),
v2=c4d.Vector(-1, 0, 0),
v3=c4d.Vector( 0, 0, 1),
off=c4d.Vector(0, 0, 100))

>>> # Calculates the dot product of u and v.
>>> u * v
2.0

>>> # Scales u by the factor of 5.
>>> u * 5.
Vector(5, 0, 0)

>>> # Transforms u by M, including translations.
>>> u * M
Vector(0, 1, 100)
```
Parameters

other (Union[int, float, c4d.Vector, c4d.Matrix]) – The other operand.

Return type

Union[c4d.Vector, float]

Returns

A float, if other is of type `Vector`. | A vector, if other is of type float or `Matrix`.

`Vector.``__rmul__`(self, other)
Calculates the product of the vector and a right-side operand.

If other is a float, it multiplies each vector component by the scalar.
If other is a matrix, the vector is transformed by it, including translations.
```>>> u = c4d.Vector(1, 0, 0)
>>> v = c4d.Vector(2, 0, 0)

>>> # A transform rotating by 90° ccw and translating by 100 units on v3 (i.e., the
>>> # z-axis, the basis vector k).
>>> M = c4d.Matrix(v1=c4d.Vector( 0, 1, 0),
v2=c4d.Vector(-1, 0, 0),
v3=c4d.Vector( 0, 0, 1),
off=c4d.Vector(0, 0, 100))

>>> # Calculates the dot product of u and v.
>>> u * v
2.0

>>> # Scales u by the factor of 5.
>>> 5. * u
Vector(5, 0, 0)

>>> # Transforms u by M, including translations.
>>> M * u
Vector(0, 1, 100)
```
Parameters

other (Union[int, float, c4d.Vector, c4d.Matrix]) – The other operand.

Return type

Union[c4d.Vector, float]

Returns

A float, if other is of type `Vector`. | A vector, if other is of type float or `Matrix`.

`Vector.``__div__`(self, other)

Divides each vector component by a scalar.

```>>> c4d.Vector(1, 2, 3) / 5
Vector(0.2, 0.4, 0.6)
```
Parameters

other (Union[int, float]) – The other operand.

Return type

c4d.Vector

Returns

The resulting vector.

`Vector.``__rdiv__`(self, other)

Not implemented.

Raise

TypeError.

`Vector.``__mod__`(self, other)

Calculates the cross product of the vector and an operand.

```>>> c4d.Vector(1, 0, 0) % c4d.Vector(0, 1, 0)
Vector(0, 0, 1)
```
Parameters

other (c4d.Vector) – The other operand.

Return type

c4d.Vector

Returns

The resulting vector.

`Vector.``__xor__`(self, other)
Calculates an alternative product operation of the vector and a left-side operand.

If other is a vector, calculates the component-wise product of the vectors.
If other is a matrix, the vector is transformed by it, excluding translations.

`Vector.__mul__()` is the operator implementation for the primary product operations.

```>>> u = c4d.Vector(1, 0, 0)
>>> v = c4d.Vector(2, 0, 0)

>>> # A transform rotating by 90° ccw and translating by 100 units on v3 (i.e., the
>>> # z-axis, the basis vector k).
>>> M = c4d.Matrix(v1=c4d.Vector( 0, 1, 0),
v2=c4d.Vector(-1, 0, 0),
v3=c4d.Vector( 0, 0, 1),
off=c4d.Vector(0, 0, 100))

>>> # Computes the component-wise product of u and v.
>>> u ^ v
Vector(2, 0, 0)

>>> # Transforms u by M, excluding translations.
>>> u ^ M
Vector(0, 1, 0)
```
Parameters

other (Union[c4d.Vector, c4d.Matrix]) – The other operand.

Return type

Union[c4d.Vector, float]

Returns

A float, if other is of type `Vector`. | A vector, if other is of type float or `Matrix`.

`Vector.``__rxor__`(self, other)

Not implemented.

Raise

TypeError.

`Vector.``__abs__`(self)

Returns a vector with the absolute (positive) value of each component.

```>>> abs(c4d.Vector(-1, -2, -3))
Vector(1,2,3)
```
Return type

c4d.Vector

Returns

The absolute vector.

`Vector.``__neg__`(self)

Returns the inverse of the vector.

```>>> -c4d.Vector(1, 2, 3)
Vector(-1,-2,-3)
```
Return type

c4d.Vector

Returns

The inverse vector.

`Vector.``__invert__`(self)

Returns the normalized vector.

```>>> ~c4d.Vector(1, 2, 3)
Vector(0.267,0.535,0.802)
```
Return type

c4d.Vector

Returns

The normalized vector.

`Vector.``__eq__`(self, other)

Checks if two vectors are equal.

Parameters

other (c4d.Vector) – The other vector.

Return type

bool

Returns

True if both vectors are equal.

`Vector.``__ne__`(self, other)

Check if two vectors are not equal.

Parameters

other (c4d.Vector) – The other vector.

Return type

bool

Returns

True if both vectors are not equal.

`Vector.``__ge__`(self, other)

Not implemented.

Raise

TypeError.

`Vector.``__gt__`(self, other)

Not implemented.

Raise

TypeError.

`Vector.``__le__`(self, other)

Not implemented.

Raise

TypeError.

`Vector.``__lt__`(self, other)

Not implemented.

Raise

TypeError.

`Vector.``GetHashCode`(self)

Returns the hash code of the vector used for hash maps and comparisons.

New in version S26.

Returns

The vector’s hash code.

Return type

int

`Vector.``IsEqual`(self, other, epsilon)

Tests component-wise if the difference is no bigger than ‘epsilon’.

New in version S26.

Parameters
• other (c4d.Vector) – The other vector to test.

• epsilon (float) – The threshold value.

Returns

True if other is in the range of epsilon, False otherwise.

Return type

bool

`Vector.``IsZero`(self, epsilon=1e-10)

Checks if each component is zero.

New in version S26.

Parameters

epsilon (float) – The threshold value.

Returns

False if one or more component are bigger than epsilon, otherwise True.

Return type

bool

`Vector.``SetZero`(self)

Sets all components to zero.

New in version S26.

`Vector.``GetAverage`(self)

Calculates the average value of ‘x’, ‘y’ and ‘z’.

New in version S26.

Returns

The average value of ‘x’, ‘y’ and ‘z’.

Return type

float

`Vector.``GetSum`(self)

Calculates the sum of ‘x’, ‘y’ and ‘z’.

New in version S26.

Returns

The sum value of ‘x’, ‘y’ and ‘z’.

Return type

float

`Vector.``ClampMin`(self, other)

Set the minimum of each component.

New in version S26.

Parameters

other (c4d.Vector) – The minimum value of ‘x’, ‘y’ and ‘z’.

`Vector.``ClampMax`(self, other)

Set the maximum of each component.

New in version S26.

Parameters

other (c4d.Vector) – The maximum value of ‘x’, ‘y’ and ‘z’.

`Vector.``Clamp01`(self)

Returns a vector that is clamped to the range [0.0 .. 1.0].

New in version S26.

Returns

The clamped vector.

Return type

c4d.Vector

`Vector.``GetLength`(self)

Calculates the length of the vector.

Return type

float

Returns

The length.

`Vector.``GetLengthSquared`(self)

Calculates the squared length of the vector.

Deprecated since version S26.000: Use `Vector.GetSquaredLength()` instead.

Return type

float

Returns

The squared length.

`Vector.``GetSquaredLength`(self)

Returns the squared length of the vector.

New in version S26.

Returns

The squared length of the vector.

Return type

float

`Vector.``GetNormalized`(self)

Calculates the normalized vector, so that `GetLength()` returns 1.0.

Return type

c4d.Vector

Returns

The normalized vector.

`Vector.``Normalize`(self)

Normalizes the vector, so that `GetLength()` returns 1.0.

`Vector.``GetMin`(self)

Returns the minimum of ‘x’, ‘y’ and ‘z’.

New in version S26.

Returns

A new vector with the minimum of ‘x’, ‘y’ and ‘z’.

Return type

c4d.Vector

`Vector.``GetMax`(self)

Returns the maximum of ‘x’, ‘y’ and ‘z’.

New in version S26.

Returns

A new vector with the maximum of ‘x’, ‘y’ and ‘z’.

Return type

c4d.Vector

`Vector.``GetRightRotated`(self, rots)

Returns a vector where the components have been rotated to the right (in the usual (x, y, z)-representation). E.g., with a value of 1 for rots, the result will be (z, x, y).

New in version S26.

Parameters

rots (int) – Number of rotations, may be negative. The result depends only on the number modulo 3.

Returns

A new rotated vector.

Return type

c4d.Vector

`Vector.``Dot`(self, v2)

Calculates the dot product of the vector and vector v2.

Parameters

v2 (c4d.Vector) – The second vector.

Return type

float

Returns

The dot product.

`Vector.``Abs`(self)

Returns the vector with absolute value for each entry

New in version S26.

Returns

A new absolute vector.

Return type

c4d.Vector

`Vector.``Min`(self, other)

Calculates the minimum of each component.

New in version S26.

Parameters

other (c4d.Vector) – The other vector.

Returns

The vector containing the minimum of each component.

Return type

c4d.Vector

`Vector.``Max`(self, other)

Calculates the maximum of each component.

New in version S26.

Parameters

other (c4d.Vector) – The other vector.

Returns

The vector containing the maximum of each component.

Return type

c4d.Vector

`Vector.``SetMin`(self, other)

Set the minimum of each component.

New in version S26.

Parameters

other (c4d.Vector) – The other vector.

`Vector.``SetMax`(self, other)

Set the maximum of each component.

New in version S26.

Parameters

other (c4d.Vector) – The other vector.

`Vector.``GetAngle`(self, other)

Calculates angle (in radians) between v1 and v2.

New in version S26.

Parameters

other (c4d.Vector) – The other vector.

Returns

The angle.

Return type

float

`Vector.``Cross`(self, v2)

Calculates the cross product of the vector and vector v2.

Parameters

v2 (c4d.Vector) – The other vector.

Return type

c4d.Vector

Returns

The result.

Static Methods Documentation

static `c4d.Vector.``GetDistance`(v1, v2)

Retrieve the distance between two vectors.

Parameters
Returns

the distance from v1 to v2.

Return type

float