|Message: Re: Direction of rotation - clockwise or counterclockwise||Not Logged In (login)|
Click on the Forum title, e.g. on the "Forums by Category" page, to read a sequence of postings to the Forum and its threads all in one page. If you are only interested in one thread or the thread following a specific posting, click the thread or the posting, which takes you to a smaller page, which contains only the part you are interested in and may be easier to navigate.
Messages are "chained" if there are only replies at the first level, i.e. 1/1.html, 1/1/1.html etc. In case of "chained" messages the message number is replaced by the icon and there is no indentation.
Inline: Display the subject line only or also the text of the posting(s); for the choice "All" the "Outline" choices are switched off.
|1||0||1||no text / full text of posting|
|2||1||All||text for level 1 only / text for All postings|
Outline: Choose the depth of the posting thread, successive toggle controls provide increasing detail.
|1||2||1||2 levels / 1 level (original posting)|
|2||3||2||3 levels / 2 levels|
|3||3||All||3 levels / all levels (all postings)|
I add few comments to make the things more explicit.
> > > > But then Michel Maire points me to examples/extended/geometry/transforms. > Readme of the example does not explain enough the underlying motivations for the this exercise. Let me try to do it here.
1 - There are 2 constructors to place volumes : - G4PVPlacement ( G4Transform3D( rotmA, transl), ... - G4PVPlacement ( rotmB, transl, ... rotmA and rotmB must be mutually inverse. The question is : what is exactly the definition of rotmA (and therefore rotmB). This is what the first two methods try to explicit : rotmA is what I call direct matrix. It is the usual definition of the matrix of a linear operator in a given frame, or the matrix of passage from a frame to another (mother --> daughter). Indeed it is the same matrix. rotmB is its inverse.
2- Operators AxialRotation. The function rotateY (or Z) build a direct matrix, e.g. rotmA Its inverse can be calculated as : rotmA_inv (theta) = rotmA(-theta) (Lie group ....) Therefore : inv [ rotateZ(phi) * rotateY(theta) ] = rotateY(-theta) * rotateZ(-phi)
This is what we wanted to illustrate in PlaceWithAxialRotations(). The first object is placed with rotmA, the second object with rotmB
3- Unfortunatly, constructor of rotation matrix with Euler angles choose the opposite convention : the constructor G4RotationMatrix(phi, theta, psi) build a rotmB matrix (inconsistency in clhep or deliberate choice ?) but I guess Euler angles constructor is not frequently used..
4- my personal choices : - use explicit definition of rotation matrix whenever possible. - use operators AxialRotation only if you are sure of what you are doing - avoid Euler angles, unless you are archi sure of what you do ...
Hope this can help. Michel
I attach the geometry of example transforms Attachment: http://hypernews.slac.stanford.edu/HyperNews/geant4/get/AUX/2015/04/04/08.29-55156-rotm.jpg