Your transformation assumes that the x- and y-axes are on the
same scale. Add 'asp = 1' to your plot() call to set the
appropriate aspect ratio.

 -Peter Ehlers


On 2010-06-09 10:13, g...@ucalgary.ca wrote:
Rectangle R centered at (x,y) with width 2w and height 2h is given by

x1=x-w
y1=y-h
x2=x+w
y2=y-h
x3=x+w
y3=y+h
x4=x-w
y4=y+h
polygon(c(x1,x2,x3,x4),c(y1,y2,y3,y4))

Rotating a point (u,v) at (0,0) by theta degree is given by matrix
[cos(theta),-sin(theta)
  sin(theta),cos(theta)]
so we have a new point (u*cos(theta)-v*sin(theta),u*sin(theta)+v*cos(theta)).

Hence rotated R by theta at (x,y) is given by

x.rotated = c(x + (x1-x)*cos(theta)-(y1-y)*sin(theta),
               x + (x2-x)*cos(theta)-(y2-y)*sin(theta),
               x + (x3-x)*cos(theta)-(y3-y)*sin(theta),
               x + (x4-x)*cos(theta)-(y4-y)*sin(theta))
y.rotated = c(y + (x1-x)*sin(theta)+(y1-y)*cos(theta),
               y + (x2-x)*sin(theta)+(y2-y)*cos(theta),
               y + (x3-x)*sin(theta)+(y3-y)*cos(theta),
               y + (x4-x)*sin(theta)+(y4-y)*cos(theta))

polygon(x.rotated,y.rotated)

But it turns out to be a parallelogram with angles not equal to 90,
not a rectangle. See R code below.

Any way to improve this so that the rotated rectangle looks like a
rectangle? Thanks,

-james


plot(1:10,1:10,xlim=c(1,20),ylim=c(1,40),type="n", main = "Rotated
rectangle looks like a   ")
## a rect at (10,20) with w = 3 and h = 2
x = 10
y = 20
w = 3
h = 2
x1=x-w
y1=y-h
x2=x+w
y2=y-h
x3=x+w
y3=y+h
x4=x-w
y4=y+h
polygon(c(x1,x2,x3,x4),c(y1,y2,y3,y4),border="blue")

##Rotate it at (10,10) by 45 degree
theta = 45/180*pi
x.rotated = c(10 + (x1-10)*cos(theta)-(y1-20)*sin(theta),
               10 + (x2-10)*cos(theta)-(y2-20)*sin(theta),
               10 + (x3-10)*cos(theta)-(y3-20)*sin(theta),
               10 + (x4-10)*cos(theta)-(y4-20)*sin(theta))
y.rotated = c(20 + (x1-10)*sin(theta)+(y1-20)*cos(theta),
               20 + (x2-10)*sin(theta)+(y2-20)*cos(theta),
               20 + (x3-10)*sin(theta)+(y3-20)*cos(theta),
               20 + (x4-10)*sin(theta)+(y4-20)*cos(theta))

polygon(x.rotated,y.rotated,border="red")


On 06/04/2010 01:21 AM, g...@ucalgary.ca wrote:
boxed.labels draw text with box well.
But, the box cannot be shadowed and srt = 45 seems not to work:
text is rotated but the box does not.
polygon.shadow can rotate and shadow but have to calculate its
dimensions,
based on the text length and size.
Do you have any other way to draw text with rotated and shadowed box?

The srt argument was intended to allow the user to rotate the text in 90
degree increments, and the box just changes shape to fit whatever is in
it. The underlying function that draws the box (rect) doesn't have a
rotation argument. It would be possible to write a special function
using polygon, just do the calculations for box size and then rotate the
text with srt= and the polygon by transforming the coordinates of the
vertices, as long as the default justification (center) is used. I can't
do this right at the moment, but if you are really stuck I might be able
to do it in the near future.

Jim



______________________________________________
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