for(unsigned j=0; j<n_part_eps; ++j)
{
TrackPoint p = i->get_point(j ? i->get_length() : 0);
- float dx = p.pos.x-endpoints[epi].pos.x;
- float dy = p.pos.y-endpoints[epi].pos.y;
- if(dx*dx+dy*dy<1e-6)
+ Vector span = p.pos-endpoints[epi].pos;
+ if(dot(span, span)<1e-6)
{
part = &*i;
part_ep = j;
d = plen-d;
TrackPoint p = part->get_point(d);
if(part_ep==1)
- p.dir += M_PI;
+ p.dir += Angle::half_turn();
return p;
}
else
{
TrackPoint p = i->get_point(j ? i->get_length() : 0);
if(j==0)
- p.dir += M_PI;
+ p.dir += Angle::half_turn();
bool found = false;
for(vector<Endpoint>::iterator k=endpoints.begin(); k!=endpoints.end(); ++k)
{
- float dx = k->pos.x-p.pos.x;
- float dy = k->pos.y-p.pos.y;
+ Vector d = k->pos-p.pos;
- float da = k->dir-p.dir;
- while(da>M_PI)
- da -= M_PI*2;
- while(da<-M_PI)
- da += M_PI*2;
+ Angle da = wrap_balanced(k->dir-p.dir);
- if(dx*dx+dy*dy<1e-6 && da>-0.01 && da<0.01)
+ if(dot(d, d)<1e-6 && abs(da).radians()<0.01)
{
k->paths |= 1<<i->get_path();
found = true;
}
}
-TrackType::Endpoint::Endpoint(float x, float y, float d, unsigned p):
- pos(x, y),
+TrackType::Endpoint::Endpoint(float x, float y, const Angle &d, unsigned p):
+ pos(x, y, 0),
dir(d),
paths(p)
{ }