# How to animate/visualize rotations of shapes?

Can I use Mathematica to create visualized rotation of a shape? Specifically, I'm trying to draw a rectangle $$R$$ with vertices where $$r>0$$ and $$\theta\in(0,\pi/4$$):

$$\\ R= \begin{pmatrix} re^{i\theta} \\ -re^{-i\theta} \\ -re^{i\theta} \\ re^{-i\theta} \end{pmatrix}$$

Then rotating it by $$2\theta$$ to create a 2nd rectangle $$R'$$ where:

$$R'= e^{i2\theta}*R = e^{i2\theta}\begin{pmatrix} re^{i\theta} \\ -re^{-i\theta} \\ -re^{i\theta} \\ re^{-i\theta} \end{pmatrix} = \begin{pmatrix} re^{i3\theta} \\ -re^{i\theta} \\ -re^{i3\theta} \\ re^{i\theta} \end{pmatrix}$$

Ideally the final graphic would start with $$R$$, then show a "shadow" of $$R$$ rotating to the position of $$R'$$. At the end, the graphic would show both $$R$$ and $$R'$$.

• First you can use Graphics to draw your shapes parametrically and then use Animate or Manipulate to animate them. – L.Yu May 23 '19 at 22:38

RotationTransform

RotationTransform[θ, p] gives a 2D rotation about the 2D point p.

Rotating the rectangle around a selected corner with trailing effects:

Manipulate[Graphics[{{EdgeForm[{Thick, Black}], FaceForm[], Rectangle[]},
Table[GeometricTransformation[{EdgeForm[Opacity[.5 k/(t + 1/100), Gray]],
Opacity[.5 k/(t + 1/100)], Red, Rectangle[]}, RotationTransform[k, pt]],
{k, 0, t - 2 Pi/36, 2 Pi/36}],
GeometricTransformation[{EdgeForm[{Thick, Gray}], Opacity[.7], Red,
Rectangle[]}, RotationTransform[t, pt]],
AbsolutePointSize[5], Green, Point[pt]}, PlotRange -> {{-2, 3}, {-2, 3}}],
{{pt, {1, 1}}, {{0, 0}, {0, 1}, {1, 0}, {1, 1}, {1/2, 1/2}}, SetterBar},
{{t, 0}, 0, 2 Pi, Animator, AnimationRunning -> False},  FrameMargins -> 0]


Change the first control to {{pt, {1, 1}}, Locator} to rotate around an arbitrary point:

You can use arbitrary shape instead of Rectangle. For example, with

text = First[First[ImportString[ExportString[
Style["A", Italic, FontSize -> 24, FontFamily -> "LucidaHandwriting"],
"PDF"], "PDF", "TextMode" -> "Outlines"]]];


replace Rectangle[] with text and use to PlotRange -> {{-32, 48}, {-32, 48}} to get