I have here an example of how a rotation matrix operates a parametric representation of a square.
R15 = {{Cos[π/12], -Sin[π/12]}, {Sin[π/12], Cos[π/12]}};
R30 = {{Cos[π/6], -Sin[π/6]}, {Sin[π/6], Cos[π/6]}};
R45 = {{Cos[π/4], -Sin[π/4]}, {Sin[π/4], Cos[π/4]}};
R60 = {{Cos[π/3], -Sin[π/3]}, {Sin[π/3], Cos[π/3]}};
R75 = {{Cos[(5 π)/12], -Sin[(5 π)/12]}, {Sin[(5 π)/12], Cos[(5 π)/12]}};
r1 = {t, -1};
r2 = {1, t};
r3 = {t, 1};
r4 = {-1, t};
rsq15 = {R15.r1, R15.r2, R15.r3, R15.r4};
rsq30 = {R30.r1, R30.r2, R30.r3, R30.r4};
rsq45 = {R45.r1, R45.r2, R45.r3, R45.r4};
rsq60 = {R60.r1, R60.r2, R60.r3, R60.r4};
rsq75 = {R75.r1, R75.r2, R75.r3, R75.r4};
ParametricPlot[{sq, rsq15, rsq30, rsq45, rsq60, rsq75}, {t, -1, 1}]
How would you minimize the amount of code necessary?