These fields don't even need to be fields except for planeVector (plus invPlaneLength for optimizing a cached computation) no?  I don't see that Point a, b, or Point3d a3d, b3d, are actually used anywhere outside of the constructor.  I think it's important to try and model shapes/geometry by their minimal pieces of data.