00001
00002
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 }