If you're new to Python
A VPython tutorial
Pictures of 3D objects
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.
This creates a 3D vector object with the given components x, y, and z.
Vectors can be added or subtracted from each other, or multiplied by an ordinary number. For example,
v1 = vector(1,2,3)
You can refer to individual components of a vector:
v2.x is 10, v2.y is 20, v2.z is 30
It is okay to make a vector from a vector: vector(v2) is still vector(10,20,30). This is a convenient way to make a separate copy of a vector.
Currently it is not possible to use +=, -=, *=, or /= with vectors.
The following functions are available for working with vectors:
mag(A) = A.mag = |A|, the magnitude of a vector
mag(A) # calculates length of A
It is possible to reset the magnitude or the magnitude squared of a vector:
v2.mag = 5 # sets magnitude to 5; no change in direction
You can reset the magnitude to 1 with norm():
norm(A) # A/|A|, normalized; magnitude of 1
You can also write v1.norm() or v1.hat. For convenience, norm(vec(0,0,0)) is calculated to be vec(0,0,0).
You can change the direction of a vector without changing its magnitude:
v2.hat = v1 # changes the direction of v2 to that of v1
To calculate the angle between two vectors (the "difference" of the angles of the two vectors).
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) or A.cross(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) or A.dot(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.
Rotating a vector
There is a function for rotating a vector:
v2 = rotate(v1, angle=a, axis=vector(x,y,z))
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=a, axis=vector(x,y,z)). 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