Re: Re: Rotation3D, MatrixRotation3D ?
- To: mathgroup at smc.vnet.net
- Subject: [mg30438] Re: [mg30410] Re: Rotation3D, MatrixRotation3D ?
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Sat, 18 Aug 2001 04:05:01 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Actually (of course) there is no need to multiply the rotation matrices explicitly as I somewhat blindly did in the message below, the following will do just as well: In[1]:= Needs["Geometry`Rotations`"] In[2]:= B=RotationMatrix3D[Pi/3,Pi/4,Pi/6]; In[3]:= Solve[RotationMatrix3D[\[Phi],\[Theta],\[Psi]]\[Equal] B,{\[Phi],\[Theta],\[Psi]}] From In[3]:= Solve::ifun: Inverse functions are being used by Solve, so some solutions may \ not be found. Out[3]= {{\[Psi] -> Pi/6, \[Theta] -> Pi/4, \[Phi] -> Pi/3}} On Friday, August 17, 2001, at 09:49 PM, Andrzej Kozlowski wrote: > My previous message in this thread actually contains (implicitly) two > ways to do that. The first way is very straight forward and consists > simply of the combination of Euler's theorem and the Mathematica > function Solve. For example, let's construct a rotation matrix: > > In[1]:= > Needs["Geometry`Rotations`"] > > In[2]:= > B=RotationMatrix3D[Pi/3,Pi/4,Pi/6]; > > In[3]:= > Solve[ RotationMatrix3D[\[Psi], 0, 0]. > RotationMatrix3D[0, \[Theta], 0].RotationMatrix3D[\[Phi], 0, > 0]\[Equal] > B,{\[Phi],\[Theta],\[Psi]}] > > From In[3]:= > Solve::ifun: Inverse functions are being used by Solve, so some > solutions may \ > not be found. > > Out[3]= > {{\[Psi] -> Pi/6, \[Theta] -> Pi/4, \[Phi] -> Pi/3}} > > One has to be careful here to get the names of the angles right (or > equivalently their order), I had it wrong in my message since > Mathematica convention is not the same as I am used to. > > This method is not 100% reliable because Mathematica is not 100% > reliable when solving trigonometric equations. There is also a second > method, basically described at the end of my previous message. If you > really need it I send you the details or you can look it up in a good > linear algebra book, e.g. Kostrykin and Manin, "Linear Algebra and > Geometry". > > Andrzej Kozlowski Toyama International University JAPAN http://platon.c.u-tokyo.ac.jp/andrzej/ > > > > > > On Friday, August 17, 2001, at 04:09 PM, ojg wrote: > >> Sounds interesting:) >> >> Are your routines able to regenerate the auler angles from the >> rotation? My >> problem is of a similar kind and might be good to look at:) >> >> Thanks, >> Johnny >> >> "David Park" <djmp at earthlink.net> wrote in message >> news:9ld1m6$2gi$1 at smc.vnet.net... >>> Johnny, >>> >>> If you have Mathematica Version 4, I may be able to help you. >>> >>> My Mathematica friend, Rip Pelletier, and I have been studying >>> rotations >>> using Jack B. Kuipers` book "Quaternions and Rotation Sequences". I >>> have >>> been preparing a set of tutorials which basically help us to >>> understand >>> rotations by explaining it as clearly as possible. They are still >>> somewhat >>> of a work in progress, but I am far enough along to be able to attack >>> the >>> problems that you have posed. I am also working on a set graphics >>> routines >>> which illustrate rotation sequences and help to visualize the various >>> sequences. >>> >>> We would be glad to share these with you if you wish. They do require >>> Mathematica Version 4 and they also use my DrawingPaper and >>> DrawingCube >>> packages from my web site. They also use two packages >>> Geometry`ExtendRotations and Geometry`RotationGraphics. You would >>> have to >>> install these packages in your AddOns/ExtraPackages folders. >>> >>> Here are some of the usage messages for the routines that are in the >>> packages. >>> >>> Geometry`ExtendRotations` >>> >>> SetRotationMatrices[alibi|alias] will set the 3D axis rotation >>> matrices \ >>> according to the alibi or alias form. The current setting is saved in >>> the >> \ >>> variable RotationMatrixForm. The alibi form matrices will rotate a >>> vector >> by >>> \ >>> the right hand rule. The alias form matrices will rotate the >>> coordinate >>> frame \ >>> by a right hand rule. >>> >>> Rx[\[Theta]] is a 3D rotation matrix for rotation about the x axis. >>> Ry[\[Theta]] is a 3D rotation matrix for rotation about the y axis. >>> Rz[\[Theta]] is a 3D rotation matrix for rotation about the z axis. >>> Rot[\[Theta]] is a 2D rotation matrix for rotation about the >>> supposed z >>> axis. >>> >>> RotationAxisAndAngle[rotationmatrix] will generate the axis of >>> rotation >> and >>> \ >>> the associated rotation angle in radians for a 3 x 3 rotation matrix. >>> An \ >>> equally valid answer is obtained by reversing the signs of both the >>> angle >>> and \ >>> the axis vector. >>> >>> EulerAngles[matrix, seqstring, form:alibi] will return the Euler >>> angles \ >>> corresponding to a sequence of axes rotations specified by seqstring. >>> An >>> axes \ >>> sequence of "XYZ" means rotation around the X axes by \[Psi], >>> followed by >> \ >>> rotation about the Y axis by \[Theta], followed by rotation about >>> the Z >> axis >>> \ >>> by \[Phi]. The rotations angles {\[Psi],\[Theta],\[Phi]} are >>> returned. For >> \ >>> sequences of the form ABA, 0 \[LessEqual] \[Theta] \[LessEqual] >>> \[Pi]. For >> \ >>> sequences of the form ABC, -\[Pi]/2 \[LessEqual] \[Theta] >>> \[LessEqual] \ >>> \[Pi]/2. The answers are in terms of the standard alibi matrices, >>> unless >> \ >>> alias is specified in the optional argument. >>> >>> Geometry`RotationGraphics` >>> >>> AlibiAliasAnimation2D[vector, {\[Theta]min, \[Theta]max}, >>> numframes:24] \ >>> produces a side by side animation of the alibi and alias >>> interpretation of >> a >>> \ >>> 2D rotation. >>> >>> DrawVector3D[vectortip, name, l, options] will draw a vector from the >> origin >>> \ >>> going to vectortip. The vector will be labeled with name at l >>> vectortip. \ >>> options can be used to pass options to the Arrow3D routine. >>> DrawVector3D[vectortip, name, options] is the same as >>> DrawVector3D[vectortip, \ >>> name, 1.1, options] >>> >>> DrawFrame3D[rotmat, {name1, name2, name3}, l, options] will draw frame >> axes >>> \ >>> rotated according to the rotation matrix, rotmat, rotating the axes >> vectors >>> \ >>> in the alibi mode. The axes will be labeled with the names at a >>> fractional >> \ >>> distance l along the axes vector. options can be used to pass options >>> to >> the >>> \ >>> Arrow3D routine. >>> DrawFrame3D[rotmat, {name1, name2, name3}, options] is the same as \ >>> DrawFrame3D[rotmat, {name1, name2, name3}, 1.1, options] >>> >>> DrawBook[rotmat, scale] will draw a book centered at the origin and >> rotated >>> \ >>> using the rotation matrix rotmat. scale can be used to change the >>> overall >> \ >>> size of the book. scale = 1 gives a book of dimensions 0.9 x 0.6 x >>> 0.2. >> The >>> \ >>> book looks best with the following lighting option: >>> Lighting \[Rule] True, >>> AmbientLight \[Rule] GrayLevel[0.3], >>> LightSources\[Rule]{{{1, 0, 1}, GrayLevel[0.4]},{{1, 1, 1}, \ >>> GrayLevel[0.4]},{{0, 1, 1},GrayLevel[0.4]}} >>> Another possibility is to use the BookLighting option command. >>> >>> ThreeStepBookAnimation[{rot1, \[Theta]1max}, {rot2, \[Theta]2max}, >>> {rot3, >> \ >>> \[Theta]3max}] will produce an animation of the book, rotating >> successively >>> \ >>> according to the three rotation matrices by the specified angles. >>> >>> TwoBookAnimation[seq1, seq2] animates two side by side book rotation \ >>> sequences where each sequence is given by a sequence of the form >>> {{rot1, \ >>> \[Theta]1max}, {rot2, \[Theta]2max}, {rot3, \[Theta]3max}}. >>> >>> AliasAnimation3D[{rot1, \[Theta]1max}, {rot2, \[Theta]2max}, {rot3, \ >>> \[Theta]3max}] will animate the a three step rotation of the frame >>> using \ >>> alias form matrices. The routine sets the alias form for matrices and >>> then >> \ >>> restores the original form. >>> >>> So far, I have two completed tutorials. >>> 1) 2D rotations, alibi and alias interptetations. Matrix form. >>> Mathematica >>> expressions for transforming row vectors, column vectors etc. >>> 2) 3D rotations about axes. Illustration of the matrix forms and the >>> mnemonic XYZXY for determining the directions of rotations and where >>> to >> put >>> the +Sin and -Sin terms in the matrix. >>> 3) 3D rotation sequences. Calculating Euler angles or axis of >>> rotation. >>> Still in progress, although the underlying routines are finished. >>> >>> We would be glad to share this work with anyone studying 3D rotations, >>> especially if they are interested in contributing ideas to improve >>> them. >>> >>> Rip has been jumping ahead, learning how to use quaternions, but so >>> far I >>> have been staying with rotation matrices. >>> >>> David Park >>> djmp at earthlink.net >>> http://home.earthlink.net/~djmp/ >>> >>> >>> >>> >>> >>> >>> >>>> From: ojg [mailto:ole.jonny.gjoen at hitecvision.com] To: mathgroup at smc.vnet.net >> To: mathgroup at smc.vnet.net >>>> >>>> Question regarding rotations. >>>> >>>> Some of the documentation found regarding this is not as far as I can >> see >>>> complete in the documentation, at least the subject is difficult >>>> enough >> to >>>> make me unsure once not 100% clear:) >>>> >>>> Fist, what are the defined "euler angles" in mathematica, and in >>>> what order >>>> are they applied? >>>> >>>> Second, of which side of the vector is the rotational matrix >>>> multiplied >> ? >>>> >>>> Third, is there a mathematica way to rotate around an abitrary >> rotational >>>> axis? If not, what would the mathematica matix be for this? >>>> >>>> My problem to solve is as follows: Given three rotational angles >>>> (a,b,c) >>>> applied in order to the following three rotational axes: Y axis, X >>>> axis, >> Z >>>> axis. (usual right hand system). This rotation applied to any >>>> vector v will >>>> give you a vector V (first Y rotation applied on v, etc). >>>> >>>> >>>> Now, given a rotational matrix with pure numerical values in, I >>>> need to find >>>> the three angles, and I need a general formulae for this solution >>>> taking >>>> care of the special cases. >>>> >>>> Thanks, >>>> Johnny >>>> >>>> >>>> >>> >>> >> >