public CelestialObject FindObject(PointF point) { var hor = Projection.Invert(point); foreach (var body in drawnObjects.OrderBy(c => Angle.Separation(hor, c.Horizontal))) { double sd = (body is SizeableCelestialObject) ? (body as SizeableCelestialObject).Semidiameter : 0; double size = Math.Max(10, sd / 3600.0 / ViewAngle * Width); PointF p = Projection.Project(body.Horizontal); if (mapContext.DistanceBetweenPoints(p, point) <= size / 2) { return(body); } } return(null); }