IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Description of Objects in VPython

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 Numeric arrays. (Numeric is a module added to Python to provide high-speed computational capability through optimized array processing. The Numeric 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,

v1 = vector(1,2,3)

v2 = vector(10,20,30)

print v1+v2 # displays (11 22 33)

print 2*v1 # displays (2 4 6)

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).

The form vector(10,12) is shorthand for vector(10,12,0).

A vector is a Python sequence, so v2.x is the same as v2[0], v2.y is the same as v2[1], and v2.z is the same as v2[2].

mag( vector ) # calculates length of vector

mag(vector(1,1,1)) # is equal to sqrt(3)

mag2(vector(1,1,1)) # is equal to 3, the magnitude squared

You can also obtain the magnitude in the form v2.mag. and the square of the magnitude as v2.mag2.

It is possible to reset the magnitude or the magnitude squared of a vector:

v2.mag = 5 # sets magnitude of v2 to 5

v2.mag2 = 2.7 # sets squared magnitude of v2 to 2.7

You can reset the magnitude to 1 with norm():

norm( vector ) # normalized; magnitude of 1

norm(vector(1,1,1)) equals vector(1,1,1)/sqrt(3)

You can also write v1.norm(). Since norm(v1) = v1/mag(v1), it is not possible to normalize a zero-length vector: norm(vector(0,0,0)) gives an error, since division by zero is involved.

vector1.diff_angle(vector2)

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

cross( vector1, vector2 )

Creates the cross product of two vectors, which is a vector perpendicular to the plane defined by vector1 and vector2, in a direction defined by the right-hand rule: if the fingers of the right hand bend from vector1 toward vector 2, the thumb points in the direction of the cross product. The magnitude of this vector is equal to the product of the magnitudes of vector1 and vector2, times the sine of the angle between the two vectors.

dot( vector1, vector2 )

Creates the dot product of two vectors, which is an ordinary number equal to the product of the magnitudes of vector1 and vector2, times the cosine of the angle between the two vectors. 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

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

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. Notice too that rotating a vector involves a function, v = rotate(), as is the case with other vector manipulations such as dot() or cross(), whereas rotation of graphics objects involves attributes, in the form object.rotate().

 

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.as_tuple().