public static Circle3D FromCenterAnd2Points( Vector3D cen, Vector3D p1, Vector3D p2 )
{
Circle3D circle = new Circle3D();
circle.Center = cen;
circle.Radius = ( p1 - cen ).Abs();
if( !Tolerance.Equal( circle.Radius, ( p2 - cen ).Abs() ) )
throw new System.ArgumentException( "Points are not on the same circle." );
Vector3D normal = ( p2 - cen ).Cross( p1 - cen );
normal.Normalize();
circle.Normal = normal;
return circle;
}