AirspaceIntersectionVector AirspacePolygon::Intersects(const GeoPoint &start, const GeoPoint &end, const TaskProjection &projection) const { const FlatRay ray(projection.ProjectInteger(start), projection.ProjectInteger(end)); AirspaceIntersectSort sorter(start, *this); for (auto it = m_border.begin(); it + 1 != m_border.end(); ++it) { const FlatRay r_seg(it->GetFlatLocation(), (it + 1)->GetFlatLocation()); fixed t = ray.DistinctIntersection(r_seg); if (!negative(t)) sorter.add(t, projection.Unproject(ray.Parametric(t))); } return sorter.all(); }