public Option<Edge3> IntersectPlane(PointDirection3 plane)
{
var d = plane.IsAbovePlane(A);
if (d == plane.IsAbovePlane(B) && d == plane.IsAbovePlane(C))
return Option<Edge3>.None;
var p0 = EdgeAB.IntersectPlane(plane);
var p1 = EdgeBC.IntersectPlane(plane);
var p2 = EdgeCA.IntersectPlane(plane);
return Match(p0, p1)
.BindNone(() => Match(p0, p2))
.BindNone (() => Match(p1, p2));
}