# vectors3d: Draw 3D vectors In matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics

## Description

This function draws vectors in a 3D plot, in a way that facilitates constructing vector diagrams. It allows vectors to be specified as rows of a matrix, and can draw labels on the vectors.

## Usage

 ```1 2 3``` ```vectors3d(X, origin = c(0, 0, 0), headlength = 0.035, ref.length = NULL, radius = 1/60, labels = TRUE, cex.lab = 1.2, adj.lab = 0.5, frac.lab = 1.1, draw = TRUE, ...) ```

## Arguments

 `X` a vector or three-column matrix representing a set of geometric vectors; if a matrix, one vector is drawn for each row `origin` the origin from which they are drawn, a vector of length 3. `headlength` the `headlength` argument passed to `arrows3d` determining the length of arrow heads `ref.length` vector length to be used in scaling arrow heads so that they are all the same size; if `NULL` the longest vector is used to scale the arrow heads `radius` radius of the base of the arrow heads `labels` a logical or a character vector of labels for the vectors. If `TRUE` and `X` is a matrix, labels are taken from `rownames(X)`. If `FALSE` or `NULL`, no labels are drawn. `cex.lab` character expansion applied to vector labels. May be a number or numeric vector corresponding to the the rows of `X`, recycled as necessary. `adj.lab` label position relative to the label point as in `text3d`, recycled as necessary. `frac.lab` location of label point, as a fraction of the distance between `origin` and `X`, recycled as necessary. Values `frac.lab > 1` locate the label beyond the end of the vector. `draw` if `TRUE` (the default), draw the vector(s). `...` other arguments passed on to graphics functions.

## Value

invisibly returns the vector `ref.length` used to scale arrow heads

## Bugs

At present, the color (`color=`) argument is not handled as expected when more than one vector is to be drawn.

## Author(s)

Michael Friendly

`arrows3d`, codetexts3d, codergl.material
Other vector diagrams: `Proj`, `arc`, `arrows3d`, `corner`, `plot.regvec3d`, `pointOnLine`, `regvec3d`, `vectors`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23``` ```vec <- rbind(diag(3), c(1,1,1)) rownames(vec) <- c("X", "Y", "Z", "J") library(rgl) open3d() vectors3d(vec, color=c(rep("black",3), "red"), lwd=2) # draw the XZ plane, whose equation is Y=0 planes3d(0, 0, 1, 0, col="gray", alpha=0.2) vectors3d(c(1,1,0), col="green", lwd=2) # show projections of the unit vector J segments3d(rbind(c(1,1,1), c(1, 1, 0))) segments3d(rbind(c(0,0,0), c(1, 1, 0))) segments3d(rbind(c(1,0,0), c(1, 1, 0))) segments3d(rbind(c(0,1,0), c(1, 1, 0))) # show some orthogonal vectors p1 <- c(0,0,0) p2 <- c(1,1,0) p3 <- c(1,1,1) p4 <- c(1,0,0) corner(p1, p2, p3, col="red") corner(p1, p4, p2, col="red") corner(p1, p4, p3, col="blue") rgl.bringtotop() ```