[R] par("uin") ?
Eik Vettorazzi
E.Vettorazzi at uke.uni-hamburg.de
Mon Jul 19 17:32:30 CEST 2010
http://tinyurl.com/34fhcvg
Am 19.07.2010 17:20, schrieb Michael Friendly:
> 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
> }
More information about the R-help
mailing list