# vec4 - a four-dimensional vector type

A vec4 represents a 4D vector type.
You can construct a vec4 by several ways:

# all components are set to zero
**v = vec4()**
(0.0000, 0.0000, 0.0000, 0.0000)
# set all components to one value
**v = vec4(2.5)**
(2.5000, 2.5000, 2.5000, 2.5000)
# set a 2d vector, the ramaining components will be zero
**v = vec4(1.5, 0.8)**
(1.5000, 0.8000, 0.0000, 0.0000)
# set a 3d vector, the ramaining component will be zero
**v = vec4(1.5, 0.8, -0.5)**
(1.5000, 0.8000, -0.5000, 0.0000)
# set all components
**v = vec4(1.5, 0.8, -0.5, 0.2)**
(1.5000, 0.8000, -0.5000, 0.2000)

Additionally you can use all of the above, but store the values
inside a tuple, a list or a string:
**v = vec4([1.5, 0.8, -0.5])**
**w = vec4("1.5, 0.8")**

Finally, you can initialize a vector with a copy of another vector:
**v = vec4(w)**

A vec3 can be used just like a list with 3 elements, so you can read
and write components using the index operator or by accessing the
components by name:

>>> v=vec4(1,2,3,1)
>>> print v[0]
1.0
>>> print v.y
2.0
>>> print v.w
1.0
>>> print v.t # this is the same as v.w
1.0

The 4th component can be accessed either by the name `"w"` or
`"t"`. You might prefer the former name when using the vector
as a homogenous coordinate while the latter might be preferable when
the 4th component shall represent a time value.

#### Mathematical operations:

The mathematical operators are supported with the following combination
of types:
vec4 = vec4 + vec4
vec4 = vec4 - vec4
float = vec4 * vec4 # dot product
vec4 = float * vec4
vec4 = vec4 * float
vec4 = vec4 / float
vec4 = vec4 % float # each component
vec4 = -vec4
float = vec4[i] # get or set element

Additionally, you can compare vectors with ==, !=, <, <=, >,
>=. Each comparison (except < and >) takes an epsilon
environment into account, this means two values are considered to be
equal if their absolute difference is less than or equal to a
threshold value epsilon. You can read and write this threshold value
using the functions `getEpsilon()` and
`setEpsilon()`.
Taking the absolute value of a vector will return the length of the vector:

float = abs(v) # this is equivalent to v.length()

#### Methods:

`length`()
- Returns the length of the vector (=sqrt(x*x+y*y+z*z)). This is
equivalent to calling abs(self).

`normalize`()
- Returns normalized vector. If the method is called on the null vector
(where each component is zero) a ZeroDivisionError is raised.

Copyright © 2002 Matthias Baas
(baas@ira.uka.de)