Re: Rotating Figures
- To: mathgroup at smc.vnet.net
- Subject: [mg15260] Re: Rotating Figures
- From: Karen Abbott <kabbott at cowan.edu.au>
- Date: Wed, 30 Dec 1998 01:50:23 -0500
- Organization: International English Centre
- References: <764t0p$bj2@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Wilson Figueroa wrote: > Does anyone know how an entire figure can be passed to Mathematica and > have that figure rotated by either a 2D or 3D transformation? > > For example, I could have a rotation matrix of: > > rot[{x_,y_}]:= {{a,b},{c,d}}.{x,y} > > This would take every point in the figure, apply the transformation, and > them replot the figure. > > I would like to be able to do this with 2D and 3D figures or data ... as > the case may be. I think that the appended Notebook will do what you want. Cheers, Paul Notebook[{ Cell[CellGroupData[{ Cell["Affine Transformations", "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ "See ", StyleBox["Mathematica Graphics: Techniques & Applications", FontSlant->"Italic"], " by Tom Wickam-Jones and The ", StyleBox["Mathematica", FontSlant->"Italic"], " Journal 4(3):38-39." }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ "An arbitrary affine transformation (that is, a composition of translation, \ rotation, and scaling) of a vector ", Cell[BoxData[ \(TraditionalForm\`{x, y}\)]], " in the plane can be be written in matrix notation as ", Cell[BoxData[ \(TraditionalForm\`m . {x, y}\ + \ c\)]], ", where ", Cell[BoxData[ \(TraditionalForm\`m\)]], " is a ", Cell[BoxData[ \(TraditionalForm\`2\[Times]2\)]], " matrix (generating rotation and scaling) and ", Cell[BoxData[ \(TraditionalForm\`c\)]], " is a constant (translation) vector." }], "Text", CellTags->{"affine transformation", "translation", "rotation", "scaling"}], Cell["\<\ Here is a simple procedure that applies affine transformations to \ two-dimensional graphics:\ \>", "Text", CellTags->"applying affine transformation to graphics"], Cell[BoxData[ \(Affine[plot_Graphics, m_?MatrixQ, c_?VectorQ] := Show[plot /. {x_?NumberQ, y_?NumberQ} \[Rule] m . {x, y} + c]\)], "Input", AspectRatioFixed->True], Cell["Commencing with a basic plot:", "Text"], Cell[BoxData[ \(\(SinPlot = Plot[Sin[x], {x, 0, 6\ \[Pi]}]; \)\)], "Input", AspectRatioFixed->True], Cell[TextData[{ "one can rotate it about the ", Cell[BoxData[ \(TraditionalForm\`z\)]], "-axis by 90 degrees and then mirror it in the ", Cell[BoxData[ \(TraditionalForm\`y\)]], "-axis:" }], "Text"], Cell[BoxData[ \(\(Affine[SinPlot, {{0, 1}, {1, 0}}, {0, 0}]; \)\)], "Input", AspectRatioFixed->True], Cell["\<\ or display a more complicated combination of rotation, scaling, and \ translation:\ \>", "Text"], Cell[BoxData[ \(\(Affine[SinPlot, {{1, 0}, {1, 3}}, {\(-1\), \(-2\)}]; \)\)], "Input", AspectRatioFixed->True] }, Open ]] } ]