1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
while(vertex3){ //tant que nous avons un 3° point
pt3 = vertex3->GetPt10();//recup' des coordonnées du 3° point
ang2 = GeAngle(&pt2,&pt3);//calcul de l angle entre 2, 3 et horizon
polAng2 = GetOffsetAng(offSet,ang2);
GePolar(&ptc,&pt2,polAng2,offset);//calcul des coord des projetés
GePolar(&ptd,&pt3,polAng2,offset);
angle1= atan2(pt2.y - pt1.y , pt2.x - pt1.x);
angle2= atan2(pt3.y - pt2.y , pt3.x - pt2.x);
if (angle1>=Ge2Pi) angle1 -=Ge2Pi;
if (angle2>=Ge2Pi) angle2 -=Ge2Pi;
if (angle1<=(-Ge2Pi)) angle1 +=Ge2Pi;
if (angle2<=(-Ge2Pi)) angle2+=Ge2Pi;
if(!GeLineInter(&ptres,&pta,&ptb,&ptc,&ptd))return 0;
if ((((angle2-angle1)>0) && (offSet<0)) || (((angle2-angle1)<0) && (offSet>0)) || ((angle1>((Ge2Pi)/4)) && (angle2<((Ge2Pi)/4)) && (offSet<0)) || ((angle1<((Ge2Pi)/4)) && (angle2>((Ge2Pi)/4)) && (offSet>0))) // si la barriere est du cote oppose au virage
{
ptList.AddPoint(ptres);
}else{
m = (ptd.y - pta.y) / (ptd.x - pta.x);
b = ptd.y - m*ptd.x;
if (((ptres.y - (( m*ptres.x)+b))/(pt2.y - (( m*pt2.x)+b)))>0) // cas ou les Res et pt2 sont du meme cote de la droite ad
{// si le pt resultant et le 2° point sont du meme cote de la droite ad: trace de res
ptList.AddPoint(ptres);
}
}
pt2 = pt3;
pta = ptc;
ptb = ptd;
vertex2 = vertex3;
vertex3 = cEnt->GetDifferentSubEnt(vertex2);
} |
Partager