ellipse(K, Q [,x0] [,npoints:m] [method:j] [,draw:T] \ [,graphics keyword phrases]), REAL scalar K > 0, 2 by 2 positive definite symmetric REAL matrix Q, REAL vector x0 or length 2, integer j, 1 <= j <= 3 |

You can use ellipse() to compute and optionally draw an ellipse with shape defined by a specified positive definite matrix and centered at a specified point ellipse(K, Q [,x0] [,graphics keywords]) computes xvals and yvals, the x- and y-coordinates of points on the ellipse defined by the equation (x - x0)' %*% solve(Q) %*% (x - x0) = K^2 The value returned is structure(x:xvals,y:yvals [,graphics keywords]). K > 0 must be a REAL scalar and Q must be a 2 by 2 REAL positive definite symmetric matrix. If x0 is an argument, it must be a REAL vector of length 2. Otherwise, rep(0,2) is used for x0. The ellipse can be plotted by Cmd> result <- ellipse(K, Q [,x0] [,graphics keywords]) Cmd> lineplot(keys:result) ellipse(K, Q [,x0], draw:T [,graphics keywords]) draws the ellipse directly and doesn't return the coordinates as a value. If the ellipse is to be added to an existing graph, include add:T as an argument. ellipse(K, Q [,x0], npoints:m ...) computes m + 1 points on the ellipse, with the first and last being identical. The default value for m is 200. There are several ways to select points on an ellipse. Macro ellipse() allows you to use any of three methods. ellipse(K, Q [,x0], method:k ...), where 1 <= k <= 3, does the same, except the way xvals and yvals are computed depends on k (default is k = 3). All three methods compute unit vectors u(theta) for m+1 equally spaced values of theta from 0 to 360 degrees, where u(theta) = vector(cos(theta), sin(theta)) Method 1 (Pure polar coordinates): x(theta) = x0 + K * u(theta)/r1(theta), r1(theta) = sqrt(u(theta)' %*% solve(Q) %*% u(theta)) Method 2 x(theta) = x0 + K * Q %*% u(theta)/r2(theta), where r2(theta) = sqrt(u(theta)' %*% Q %*% u(theta)) Method 3 (default) x(theta) = x0 + K*cholesky(Q)' %*% u(theta) The default method (3) seems to do the best job, but you may want to try one of the others to see if they produce a better looking ellipse. See also 'graph_keys', lineplot(), cholesky(), solve(), 'matrices'

Gary Oehlert 2003-01-15