Although these are correct, they will be more robust (especially if the arbitrary ellipse is added) if they are defined in terms of points on the ellipse. So, for example, if p.y = self.center.y then use `Line(*self.intersection(Line(p, Point(p.x + 1, p.y))))`.