// @(#)root/g3d:$Id$ // Author: Nenad Buncic 19/09/95 /************************************************************************* * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #include "TPARA.h" #include "TNode.h" #include "TMath.h" ClassImp(TPARA) /** \class TPARA \ingroup g3d A parallelepiped. \image html g3d_para.png It has 9 parameters: - name: name of the shape - title: shape's title - material: (see TMaterial) - dx: half-length in x - dy: half-length in y - dz: half-length in z - alpha: angle formed by the y axis and by the plane joining the centre of the faces parallel to the z-x plane at -DY and +DY - theta: polar angle of the line joining the centres of the faces at -DZ and +DZ in z - phi: azimuthal angle of the line joining the centres of the faces at -DZ and +DZ in z */ //////////////////////////////////////////////////////////////////////////////// /// PARA shape default constructor TPARA::TPARA() { fAlpha = 0.; fTheta = 0.; fPhi = 0.; } //////////////////////////////////////////////////////////////////////////////// /// PARA shape normal constructor TPARA::TPARA(const char *name, const char *title, const char *material, Float_t dx, Float_t dy, Float_t dz, Float_t alpha, Float_t theta, Float_t phi) : TBRIK(name, title,material, dx, dy, dz) { fAlpha = alpha; fTheta = theta; fPhi = phi; } //////////////////////////////////////////////////////////////////////////////// /// PARA shape default destructor TPARA::~TPARA() { } //////////////////////////////////////////////////////////////////////////////// /// Create PARA points void TPARA::SetPoints(Double_t *points) const { if (!points) return; Float_t dx, dy, dz, theta, phi, alpha; const Float_t pi = Float_t (TMath::Pi()); alpha = fAlpha * pi/180.0; theta = fTheta * pi/180.0; phi = fPhi * pi/180.0; dx = TBRIK::fDx; dy = TBRIK::fDy; dz = TBRIK::fDz; // Parallelepiped change angles to tangents (by Pavel Nevski 12/04/99) Double_t txy = TMath::Tan(alpha); Double_t tth = TMath::Tan(theta); Double_t txz = tth*TMath::Cos(phi); Double_t tyz = tth*TMath::Sin(phi); *points++ = -dz*txz-txy*dy-dx ; *points++ = -dy-dz*tyz ; *points++ = -dz; *points++ = -dz*txz+txy*dy-dx ; *points++ = +dy-dz*tyz ; *points++ = -dz; //3 *points++ = -dz*txz+txy*dy+dx ; *points++ = +dy-dz*tyz ; *points++ = -dz; *points++ = -dz*txz-txy*dy+dx ; *points++ = -dy-dz*tyz ; *points++ = -dz;//1 *points++ = +dz*txz-txy*dy-dx ; *points++ = -dy+dz*tyz ; *points++ = +dz; *points++ = +dz*txz+txy*dy-dx ; *points++ = +dy+dz*tyz ; *points++ = +dz;//7 *points++ = +dz*txz+txy*dy+dx ; *points++ = +dy+dz*tyz ; *points++ = +dz; *points++ = +dz*txz-txy*dy+dx ; *points++ = -dy+dz*tyz ; *points++ = +dz;//5 }