Home | 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. vec(x,y,z) 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, var v1 = vec(1,2,3) var v2 = vec(10,20,30) v1+v2 # same as vec( 1, 22, 33) 20*v1 # same as vec(20, 40, 60) 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: vec(v2) is still vec(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. Vector functions The following functions are available for working with vectors: mag(A) = A.mag = |A|, the magnitude of a vector mag2(A) = A.mag2 = |A|*|A|, the vector's magnitude squared norm(A) = A.norm() = A/|A|, a unit vector in the direction of the vector hat(A) = A.hat = A/|A|, a unit vector in the direction of the vector; an alternative to A.norm(), based on the fact that unit vectors are customarily written in the form ĉ, with a "hat" over the vector dot(A,B) = A.dot(B) = A dot B, the scalar dot product between two vectors cross(A,B) = A.cross(B), the vector cross product between two vectors diff_angle(A,B) = A.diff_angle(B), the angle between two vectors, in radians proj(A,B) = A.proj(B) = dot(A,norm(B))*norm(B), the vector projection of A along B comp(A,B) = A.comp(B) = dot(A,norm(B)), the scalar projection of A along B A.equals(B) is True if A and B have the same components (which means that they have the same magnitude and the same direction) vec.random() produces a vector each of whose components are random numbers in the range -1 to +1 Some examples: mag(A) # calculates length of A mag(vec(1,1,1)) # = sqrt(3) = 1.732... mag2(vec(1,1,1)) # = 3; magnitude squared 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 v2.mag2 = 2.7 # sets squared magnitude # of v2 to 2.7 You can reset the magnitude to 1 with norm(): norm(A) # A/|A|, normalized; magnitude 1 norm(vec(1,1,1)) # vec(1,1,1)/sqrt(3) 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 # but not its magnitude To calculate the angle between two vectors (the "difference" of the angles of the two vectors): ang = v1.diff_angle(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) 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 to mag(A)*mag(B)*sin(A.diff_angle(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(A.diff_angle(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=vec(x,y,z)) The angle must be in radians. The default axis is (0,0,1), for a rotation counterclockwise 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=vec(1,1,1)). There is also a rotate capability for objects. The JavaScript versions are v2 = rotate(v1, {angle:a, axis=vec(x,y,z}) and v2 = v1.rotate({angle:a, axis=vec(x,y,z}). 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

Top of page