Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- RollSub[p_, dir_, \[Theta]_] := Module[{sq, rp},
- sq = {p, p + dir, p + dir + RotationMatrix[Pi/2].dir,
- p + RotationMatrix[Pi/2].dir};
- sq = Map[RotationMatrix[-\[Theta]].(# - (p + dir)) + (p + dir) &,
- sq];
- sq = Map[# &, sq]
- ];
- Roll[p_, dir_, \[Theta]_] :=
- Module[{n = Floor[2 \[Theta]/Pi], sq0, sq},
- sq0 = RollSub[p, dir, 0];
- sq = Nest[RotateLeft[RollSub[#[[1]], dir, Pi/2]] &, sq0, n];
- RollSub[sq[[1]], dir, \[Theta] - n Pi/2]
- ];
- RollAround[\[Theta]_] := Module[{p, dir, th, n, m},
- n = Mod[Floor[\[Theta]/Pi], 4] + 1;
- p = {{0, 0}, {3, 0}, {3, 3}, {0, 3}}[[n]];
- dir = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}[[n]];
- th = \[Theta] - Pi (n - 1);
- m = Mod[Floor[2 \[Theta]/Pi], 4] + 1;
- Nest[RotateRight, Roll[p, dir, th],
- 1/4 (-3 - (-1)^m + 6 m) + 2 Floor[(n + 1)/2]]
- ];
- Manipulate[
- Show[Graphics[{
- EdgeForm[Directive[Thick, RGBColor[0.1, 0.2, 0.1]]], FaceForm[],
- Rectangle[{0, 0}, {3, 3}],
- EdgeForm[Thick],
- Polygon[RollAround[Mod[\[Theta], 4 Pi]]]
- }, PlotRange -> {{-0.1, 3.1}, {-0.1, 3.1}}],
- ParametricPlot[
- RollAround[t], {t, If[\[Theta] < 4 Pi, 0, Mod[\[Theta], 4 Pi]],
- If[\[Theta] < 4 Pi, Max[\[Theta], 0.01], 4 Pi - 0.01]},
- PlotStyle -> RGBColor[0.450385`, 0.157961`, 0.217975`]]
- , ImageSize -> 320]
- , {\[Theta], 0, 8 Pi - 0.01}]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement