Skip to content
Prev 5629 / 398513 Next

pch=15 symbol of size=10 mm

On Tue, 9 May 2000, Jim Lemon wrote:

            
Thanks for response from Jim Lemon.  I tried 10/25.4/par("csi") and
several other ideas before submitting to r-help in frustration.
Below is a function that generates regular polygons, filled or
borders, of n sides (n>8 => circle), with "diameter" prescribed
in mm, for use alone or with apply.

############################################################

ngon <- function (xydc, n=4, type=1)
  # draw or fill regular polygon
  # xydc a four element vector with
  #   x and y of center, d diameter in mm, and c color
  # n number of sides of polygon, n>8 => circle
  #   if n odd, vertex at (0,y), else midpoint of side
  # type=1 => interior filled, type=2 => edge
  # type=3 => both
{
  u <- par("usr")
  p <- par("pin")
  d <- as.numeric(xydc[3])
  inch <- d/25.4
  rad <- inch*((u[2]-u[1])/p[1])/2
  ys <- inch*((u[4]-u[3])/p[2])/2/rad
  if (n > 8) n <- d*4 + 1
  th <- pi*2/n
  costh <- cos (th)
  sinth <- sin (th)
  x <- y <- rep (0,n+1)
  if (n %% 2) {
    x[1] <- 0
    y[1] <- rad
    }
  else {
    x[1] <- -rad*sin(th/2)
    y[1] <-  rad*cos(th/2)
    }
  for (i in 2:(n+1)) {
    xl <- x[i-1]
    yl <- y[i-1]
    x[i] <- xl*costh - yl*sinth
    y[i] <- xl*sinth + yl*costh
    }
  x <- x + as.numeric(xydc[1])
  y <- y*ys + as.numeric(xydc[2])
  if (type %% 2) polygon (x,y,col=xydc[4],border=0)
  if (type %/% 2) lines (x,y,col=xydc[4])
  invisible()
}
 
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._