+ Vector local(p.x-position.x, p.y-position.y, p.z-position.z);
+ float c = cos(rotation);
+ float s = sin(rotation);
+ local = Vector(c*local.x+s*local.y, c*local.y-s*local.x, local.z);
+
+ TrackPoint tp = type.get_nearest_point(local);
+ tp.pos = Vector(position.x+tp.pos.x*c-tp.pos.y*s, position.y+tp.pos.y*c+tp.pos.x*s, position.z+tp.pos.z);
+ tp.dir += rotation;
+ return tp;
+}
+
+bool Track::collide_ray(const Vector &start, const Vector &ray) const
+{
+ Vector local_start(start.x-position.x, start.y-position.y, start.z-position.z);
+ float c = cos(rotation);
+ float s = sin(rotation);