Normal3D.cc

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 // $Id:$
00003 // ---------------------------------------------------------------------------
00004 
00005 #include "CLHEP/Geometry/Normal3D.h"
00006 #include "CLHEP/Geometry/Transform3D.h"
00007 
00008 namespace HepGeom {
00009   //--------------------------------------------------------------------------
00010   Normal3D<float> &
00011   Normal3D<float>::transform(const Transform3D & m) {
00012     double vx = x(),    vy = y(),    vz = z();
00013     double xx = m.xx(), xy = m.xy(), xz = m.xz();
00014     double yx = m.yx(), yy = m.yy(), yz = m.yz();
00015     double zx = m.zx(), zy = m.zy(), zz = m.zz();
00016     set((yy*zz-yz*zy)*vx+(yz*zx-yx*zz)*vy+(yx*zy-yy*zx)*vz,
00017         (zy*xz-zz*xy)*vx+(zz*xx-zx*xz)*vy+(zx*xy-zy*xx)*vz,
00018         (xy*yz-xz*yy)*vx+(xz*yx-xx*yz)*vy+(xx*yy-xy*yx)*vz);
00019     return *this;
00020   }
00021 
00022   //--------------------------------------------------------------------------
00023   Normal3D<float>
00024   operator*(const Transform3D & m, const Normal3D<float> & v) {
00025     double vx = v.x(),  vy = v.y(),  vz = v.z();
00026     double xx = m.xx(), xy = m.xy(), xz = m.xz();
00027     double yx = m.yx(), yy = m.yy(), yz = m.yz();
00028     double zx = m.zx(), zy = m.zy(), zz = m.zz();
00029     return Normal3D<float>
00030       ((yy*zz-yz*zy)*vx+(yz*zx-yx*zz)*vy+(yx*zy-yy*zx)*vz,
00031        (zy*xz-zz*xy)*vx+(zz*xx-zx*xz)*vy+(zx*xy-zy*xx)*vz,
00032        (xy*yz-xz*yy)*vx+(xz*yx-xx*yz)*vy+(xx*yy-xy*yx)*vz);
00033   }
00034 
00035   //--------------------------------------------------------------------------
00036   Normal3D<double> &
00037   Normal3D<double>::transform(const Transform3D & m) {
00038     double vx = x(),    vy = y(),    vz = z();
00039     double xx = m.xx(), xy = m.xy(), xz = m.xz();
00040     double yx = m.yx(), yy = m.yy(), yz = m.yz();
00041     double zx = m.zx(), zy = m.zy(), zz = m.zz();
00042     set((yy*zz-yz*zy)*vx+(yz*zx-yx*zz)*vy+(yx*zy-yy*zx)*vz,
00043         (zy*xz-zz*xy)*vx+(zz*xx-zx*xz)*vy+(zx*xy-zy*xx)*vz,
00044         (xy*yz-xz*yy)*vx+(xz*yx-xx*yz)*vy+(xx*yy-xy*yx)*vz);
00045     return *this;
00046   }
00047 
00048   //--------------------------------------------------------------------------
00049   Normal3D<double>
00050   operator*(const Transform3D & m, const Normal3D<double> & v) {
00051     double vx = v.x(),  vy = v.y(),  vz = v.z();
00052     double xx = m.xx(), xy = m.xy(), xz = m.xz();
00053     double yx = m.yx(), yy = m.yy(), yz = m.yz();
00054     double zx = m.zx(), zy = m.zy(), zz = m.zz();
00055     return Normal3D<double>
00056       ((yy*zz-yz*zy)*vx+(yz*zx-yx*zz)*vy+(yx*zy-yy*zx)*vz,
00057        (zy*xz-zz*xy)*vx+(zz*xx-zx*xz)*vy+(zx*xy-zy*xx)*vz,
00058        (xy*yz-xz*yy)*vx+(xz*yx-xx*yz)*vy+(xx*yy-xy*yx)*vz);
00059   }
00060 } /* namespace HepGeom */

Generated on Mon May 27 17:50:32 2013 for Geant4 by  doxygen 1.4.7