NDview Help: The Basis Vectors Panel

The basis vectors panel shows spanning vectors for the projective subspace used by the current window to view the currently selected object. In addition, it displays the camera displacement relative to the object, both as a displacement in the higher dimensional space, and as a displacement in the in the projective subspace (relative to the coordinates of the current window). The default mode is to update these values continually, but there is also an option to "update once", after which it will not continually poll Geomview and you can type in new values more easily.

To best understand what these numbers do, try changing them a little bit at a time. For example, replace the "camera view from" vector with a larger multiple. This should result in the camera moving away from the current object. (This is not the same as using zoom; see the toolkit help page for more details.)

Examples and explanation of changing the spanning vectors

Suppose you are looking at a standard projection from four dimensions into three, by chopping of the last coordinate. The spanning vectors may look like this (especially if you have just begun):

x-dir: (1.00, 0.00, 0.00, 0.00) 
y-dir: (0.00, 1.00, 0.00, 0.00) 
z-dir: (0.00, 0.00, 1.00, 0.00)
Suppose you type a change into the first vector so that it looks like (1.00, 1.00, 0.00, 0.00), and then (without moving the mouse) press return. The panel should update itself to look like this:
x-dir: (0.70, 0.70, 0.00, 0.00) 
y-dir: (-0.70, 0.70, 0.00, 0.00) 
z-dir: (0.00, 0.00, 1.00, 0.00)
The new set of vectors is again an orthonormal basis for the three dimensional projected subspace shown in the current window. Each time you type something in, the result is processed by a Gram-Schmidt algorithm, which normalizes the entry just typed in and adjusts all the other vectors to be orthonormal. "All the other vectors" means the other two displayed on the panel, as well as other basis vectors that complete a basis for the n-d space. In the above example, if you had modified the first vector to read (0.00, 0.00, 0.00, 1.00) instead of (1.00, 1.00, 0.00, 0.00), then nothing would have changed, because the Gram-Schmidt algorithm would have detected a singularity and returned the original values. The singular matrix in this case results from trying to set the first vector equal to a fourth (undisplayed) vector, and in general trying to type in a vector that is not linearly independent of the others will not effect any change. In order to avoid this difficulty, it is sometimes necessary to use a two step process. In this case, if the first vector is first changed to (.70,0.00,0.00,.70), and then to (0.00,0.00,0.00,1.00), it should give the intended result. You can change the "unseen" vectors by using this panel in combination with other cameras (of the same cluster) whose projected axes include those you wish to change.

This final paragraph is to be read by those who want to know about the internal implementation of this panel, in order to know _exactly_ what the modification of these values does. Casual users hopefully will not need to know the following details. The information given on this panel is basically four rows of a transformation matrix relating object coordinates to camera coordinates. This transformation matrix is actually the product of several other matrices maintained within Geomview. In order to allow several cameras to look at the same scene, Geomview keeps "camera to universe" matrices. In order to allow movement of different objects relative to one another, Geomview keeps "object to world" matrices. And in order to allow movement of the "world" all at once, Geomview keeps "world to universe" matrices. So to find an "object to camera" transform used in this panel, appropriate object, world, and camera matrices are multiplied together, and when the user modifies one of the values on the panel, the appropriate matrix is recalculated and sent back. Appropriate in this case means that, when the world is the current object (or targetgeom, in the language of Geomview) then modifications are made to the camera matrix, which may affect all the cameras attached to that camera's cluster. When something else is the current object (targetgeom), the object matrix is modified. In neither case is the world modified. ( It is possible to simulate a movement of the world either through repeated movements of cameras or objects, whichever is easier.) All of these matrices can be examined directly by using Geomview's command language. For example, to get the camera c0's matrix, give Geomview the command (echo (ND-xform c0))

Go back to the beginning
Olaf Holt 3/16/94