I inherited a function written either for an older version of R or SPlus
to draw a brace, "{", in a graph. It uses par("uin") to determine the scaling of the quarter circles that make up segments of the brace, but that setting doesn't
exist in current R.
I'm guessing that, in the function below, ux, uy can be defined from
par("usr") and par("pin"), but maybe someone remembers what par("uin")
was supposed to refer to.

brace <- function (x1 = 0, y1 = 0, x2 = 0, y2 = 1, right = TRUE, rad = 0.2)
{
   uin <- par("uin")
   ux <- uin[1]
   uy <- uin[2]
   dx <- x2 - x1
   dy <- y2 - y1
   alpha <- atan(ux * dx, uy * dy)
   scale <- sqrt((ux * dx)^2 + (uy * dy)^2)
   if (scale > 5 * rad)
       rad <- rad/scale
   qcirc <- cbind(cos((0:10) * pi/20), sin((0:10) * pi/20))
   qcircr <- cbind(cos((10:0) * pi/20), sin((10:0) * pi/20))
   rot <- function(theta) t(cbind(c(cos(theta), sin(theta)),
       c(-sin(theta), cos(theta))))
   seg1 <- t(t(rad * qcirc %*% rot(-pi/2)) + c(0, rad))
   seg4 <- t(t(rad * qcirc) + c(0, 1 - rad))
   seg3 <- t(t((rad * qcircr) %*% rot(pi)) + c(2 * rad, 0.5 +
       rad))
   seg2 <- t(t((rad * qcircr) %*% rot(pi/2)) + c(2 * rad, 0.5 -
       rad))
   bra <- rbind(seg1, seg2, seg3, seg4)
   if (!right)
       bra <- bra %*% diag(c(-1, 1))
   bra <- scale * bra %*% rot(-alpha)
   bra <- bra %*% diag(c(1/ux, 1/uy))
   bra <- t(t(bra) + c(x1, y1))
   bra
}

--
Michael Friendly Email: friendly AT yorku DOT ca Professor, Psychology Dept.
York University      Voice: 416 736-5115 x66249 Fax: 416 736-5814
4700 Keele Street    Web:   http://www.datavis.ca
Toronto, ONT  M3J 1P3 CANADA

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to