The vector Object

The vector object is not a displayable object but is
a powerful aid to 3D computations. Its properties are similar to
vectors used in science and engineering. It can be used together with
numpy arrays . (numpy is a module added to Python to provide
high-speed computational capability through optimized array processing.
The numpy module is imported automatically by Visual.)

vector(x,y,z)

Returns a vector object with the given components, which are made to be
floating-point (that is, 3 is converted to 3.0).

Vectors can be added or subtracted from each other, or multiplied by an
ordinary number. For example,

You can also write v1.norm(). For convenience, norm(vector(0,0,0)) is calculated to be vector(0,0,0).

To calculate the angle between two vectors (the "difference"
of the angles of the two vectors).

diff_angle(v1,v2)

You can also write v1.diff_angle(v2). For convenience, if either of the vectors has zero
magnitude, the difference of the angles is calculated to be zero.

cross(A,B) gives the cross product of two vectors, a vector perpendicular to the plane defined by A and B,
in a direction defined by the right-hand rule: if the fingers of the right
hand bend from A toward B, the thumb points in the direction
of the cross product. The magnitude of this vector is equal mag(A)*mag(B)*sin(diff_angle(A,B)).

dot(A,B) gives the dot product of two vectors,
which is an ordinary number equal to mag(A)*mag(B)*cos(diff_angle(A,B)). If the
two vectors are normalized, the dot product gives the cosine of the angle
between the vectors, which is often useful.

You can also say vector1.cross(vector2) or vector1.dot(vector2)).

Rotating a vector

There is a function for rotating a vector:

v2 = rotate(v1, angle=theta, axis=(1,1,1))

The angle must be in radians. The default axis is
(0,0,1), for a rotation in the xy plane around the z axis. There
is no origin for rotating a vector. You can also write v2
= v1.rotate(angle=theta, axis=(1,1,1)).
There is also a rotate capability for
objects.

There are functions for converting between degrees
and radians, where there are 2*pi radians in 360 degrees:

radians(360) is equivalent to 2*pi

degrees(2*pi) is equivalent to 360

Convenient conversion

For convenience Visual automatically converts (a,b,c) into
vector(a,b,c), with floating-point values, when creating Visual objects:
sphere.pos=(1,2,3) is equivalent to sphere.pos=vector(1.,2.,3.). However,
using the form (a,b,c) directly in vector computations will give errors,
because (a,b,c) isn't a vector; write vector(a,b,c) instead.

You can convert a vector vec1 to a Python tuple (a,b,c) by tuple(vec1) or
by the much faster option vec1.astuple().