Compute Radially Equispaced Points on Ellipse
Compute points on (the boundary of) an ellipse which is given by elementary geometric parameters.
ellipsePoints(a, b, alpha = 0, loc = c(0, 0), n = 201, keep.ab.order=FALSE)
a,b |
length of half axes in (x,y) direction. Note that
(a,b) is equivalent to (b,a) unless
|
alpha |
angle (in degrees) giving the orientation of the ellipse,
i.e., the original (x,y)-axis ellipse is rotated by |
loc |
center (LOCation) of the ellipse. |
n |
number of points to generate. |
keep.ab.order |
logical indicating if (a,b) should be
considered ordered. When Note that |
A numeric matrix of dimension n x 2
, each row containing the
(x,y) coordinates of a point.
Martin Maechler, March 2002.
the ‘ellipse’ package and ellipsoidhull
and ellipsoidPoints
in the ‘cluster’ package.
## Simple Ellipse, centered at (0,0), x-/y- axis parallel: ep <- ellipsePoints(5,2) str(ep) plot(ep, type="n",asp=1) ; polygon(ep, col = 2) ## (a,b) = (2,5) is equivalent to (5,2) : lines(ellipsePoints(2,5), lwd=2, lty=3) ## keep.order=TRUE : Now, (2,5) are axes in x- respective y- direction: lines(ellipsePoints(2,5, keep.ab.order=TRUE), col="blue") ## rotate by 30 degrees : plot(ellipsePoints(5,2, alpha = 30), asp=1) abline(h=0,v=0,col="gray") abline(a=0,b= tan( 30 *pi/180), col=2, lty = 2) abline(a=0,b= tan(120 *pi/180), col=3, lty = 2) ## NB: use x11(type = "Xlib") for the following if you can if(dev.interactive(TRUE)) { ## Movie : rotating ellipse : nTurns <- 4 # #{full 360 deg turns} for(al in 1:(nTurns*360)) { ep <- ellipsePoints(3,6, alpha=al, loc = c(5,2)) plot(ep,type="l",xlim=c(-1,11),ylim=c(-4,8), asp=1, axes = FALSE, xlab="", ylab="") } ## Movie : rotating _filled_ ellipse {less nice to look at} for(al in 1:180) { ep <- ellipsePoints(3,6, alpha=al, loc = c(5,2)) plot(ep,type="n",xlim=c(-1,11),ylim=c(-4,8), asp=1, axes = FALSE, xlab="", ylab="") polygon(ep,col=2,border=3,lwd=2.5) } }# only if interactive
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.