rot2                 package:sfsmisc                 R Documentation

_R_o_t_a_t_e _P_l_a_n_a_r _P_o_i_n_t_s _b_y _A_n_g_l_e

_D_e_s_c_r_i_p_t_i_o_n:

     Rotate planar (xy) points by angle 'phi' (in radians).

_U_s_a_g_e:

     rot2(xy, phi)

_A_r_g_u_m_e_n_t_s:

      xy: numeric 2-column matrix, or coercable to one.

     phi: numeric scalar, the angle in radians (i.e., 'phi=pi'
          corresponds to 180 degrees) by which to rotate the points.

_V_a_l_u_e:

     A two column matrix as 'xy', containing the rotated points.

_A_u_t_h_o_r(_s):

     Martin Maechler, Oct.1994

_E_x_a_m_p_l_e_s:

     ## Rotate three points by 60 degrees :
     (xy0 <- rbind(c(1,0.5), c(1,1), c(0,1)))
     (Txy <- rot2(xy0, phi = 60 * pi/180))
     plot(xy0, col = 2, type = "b", asp = 1,
          xlim=c(-1,1), ylim=c(0,1.5), main = "rot2(*, pi/3) : 2d rotation by 60")
     points(Txy, col = 3, type = "b")
     O <- rep(0,2); P2 <- rbind(xy0[2,], Txy[2,])
     arrows(O,O,P2[,1],P2[,2], col = "dark gray")

     xy0 <- .8*rbind(c(1,0), c(.5,.6), c(.7,1), c(1,1), c(.9,.8), c(1,0)) - 0.2
     plot(xy0, col= 2, type="b", main= "rot2( <polygon>, pi/4 * 1:7)", asp=1,
          xlim=c(-1,1),ylim=c(-1,1), lwd= 2, axes = FALSE, xlab="", ylab="")
     abline(h=0, v=0, col="thistle"); text(1.05, -.05, "x"); text(-.05,1.05, "y")
     for(phi in pi/4 * 0:7)
        do.call("arrows",c(list(0,0),rot2(xy0[2,], phi), length=0.1, col="gray40"))
     for(phi in pi/4 * 1:7)
        polygon(rot2(xy0, phi = phi), col = 1+phi/(pi/4), border=2, type = "b")

