00001
00010 #include "RpcPlane.h"
00011
00012 using namespace HepGeom;
00013
00014 RpcPlane::RpcPlane(double xUp, double xLow,
00015 double yUp, double yLow,
00016 double z )
00017 {
00018 m_xUp = xUp;
00019 m_xLow = xLow;
00020 m_yUp = yUp;
00021 m_yLow = yLow;
00022 m_z = z;
00023 }
00024
00025
00026 RpcPlane::~RpcPlane()
00027 {}
00028
00029 bool RpcPlane::intersect(const Point3D<double> & linePoint, const Normal3D<double> & lineSlope,
00030 Point3D<double> & intersect )
00031 {
00032 Point3D<double> aPoint=linePoint;
00033 Normal3D<double> aSlope=lineSlope;
00034
00035 bool found;
00036
00037 found=false;
00038
00039 double x,y;
00040
00042 if( aSlope.z()!=0 ) {
00043 x=aSlope.x()/aSlope.z()*(m_z-aPoint.z()) + aPoint.x();
00044 y=aSlope.y()/aSlope.z()*(m_z-aPoint.z()) + aPoint.y();
00045
00046 if(x>=m_xLow && x<=m_xUp &&
00047 y>=m_yLow && y<=m_yUp ) {
00048
00049 found = true;
00050 intersect.setX(x);
00051 intersect.setY(y);
00052 intersect.setZ(m_z);
00053
00054 }
00055 }
00056
00057 return found;
00058 }
00059
00060
00061 std::ostream & operator<<(std::ostream & os, const RpcPlane & p)
00062 {
00063 os<<"xUp="<<p.xUp()<<" "<<"xLow="<<p.xLow()<<" "
00064 <<"yUp="<<p.yUp()<<" "<<"yLow="<<p.yLow()<<" "
00065 <<"z="<<p.z();
00066
00067 return os;
00068 }
00069