|
FlyoDoc_2011 Pisa 2011 by GmP --- 011
|
#include <devotot.h>
Public Member Functions | |
| virtual int | Posizione () |
| virtual double | CamInter () |
| virtual double | CamBuco () |
| virtual void | Prgeom () |
Protected Attributes | |
| gvet | Dins |
| gvet | Dind |
| gvet | P_Cin |
| gvet | Dinrs |
| gvet | Dinrd |
| gvet | P_Crot |
| gvet | V_rot |
| double DevOtOt::CamInter | ( | ) | [virtual] |
poi verifico se colpisce le pareti del buco .....
Reimplemented from DevOt.
Definition at line 72 of file devotot.cpp.
{
//uso quella di DevRt per calcolare il cammino
// interno senza il buco...
double tratto=DevOt::CamInter();
double nv,t;
camm=-1.;
// calcolo il cammino positivo verso le otto+2 superfici del buco. Per dist>0
// scelgo il cammino maggiore
if((nv=V_dev[0])>0.0 && Dins[0]>0.0) // piani x
{t=Dins[0]/nv; if(t>camm)camm=t;}
else if(nv<0.0 && Dind[0]>0.0)
{t=-Dind[0]/nv; if(t>camm)camm=t;}
if((nv=V_dev[1])>0.0 && Dins[1]>0.0) // piani y
{t=Dins[1]/nv; if(t>camm)camm=t;}
else if(nv<0.0 && Dind[1]>0.0)
{t=-Dind[1]/nv; if(t>camm)camm=t;}
if((nv=V_dev[2])>0.0 && Dins[2]>0.0) // piani z
{t=Dins[2]/nv; if(t>camm)camm=t;}
else if(nv<0.0 && Dind[2]>0.0)
{t=-Dind[2]/nv; if(t>camm)camm=t;}
// roto di 45 gradi per controllare il moto rispetto ai piani inclinati...
V_rot.setvn(Firot*(V_dev[0]+V_dev[1]),Firot*(V_dev[1]-V_dev[0]), V_dev[2]);
if((nv=V_rot[0])>0.0 && Dinrs[0]>0.0) // piani x
{t=Dinrs[0]/nv; if(t>camm)camm=t;}
else if(nv<0.0 && Dinrd[0]>0.0)
{t=-Dinrd[0]/nv; if(t>camm)camm=t;}
if((nv=V_rot[1])>0.0 && Dinrs[1]>0.0) // piani y
{t=Dinrs[1]/nv; if(t>camm)camm=t;}
else if(nv<0.0 && Dind[1]>0.0)
{t=-Dinrd[1]/nv; if(t>camm)camm=t;}
// test su zeta non serve
// quindi confronto camm con tratto e accetto il cammino piu' breve......
if(camm<0.0) {camm=tratto; return camm;}
if(camm>0.0 && tratto<camm) camm=tratto;
return camm;
}