function [ r, center ] = sphere_exp2imp_3d ( p1, p2, p3, p4 )

%*****************************************************************************80
%
%% sphere_exp2imp_3d() converts a sphere from explicit to implicit form in 3D.
%
%  Discussion:
%
%    An explicit sphere in 3D is determined by four points,
%    which should be distinct, and not coplanar.
%
%    An implicit sphere in 3D satisfies the equation:
%
%      sum ( ( P(1:DIM_NUM) - CENTER(1:DIM_NUM) )^2 ) = R^2
%
%  Licensing:
%
%    This code is distributed under the MIT license.
%
%  Modified:
%
%    10 August 2005
%
%  Author:
%
%    John Burkardt
%
%  Reference:
%
%    Adrian Bowyer and John Woodwark,
%    A Programmer's Geometry,
%    Butterworths, 1983.
%
%  Input:
%
%    real P1(3), P2(3), P3(3), P4(3),
%    four distinct noncoplanar points on the sphere.
%
%  Output:
%
%    real R, CENTER(3), the radius and the center
%    of the sphere.  If the linear system is
%    singular, then R = -1, CENTER(1:3) = 0.
%
  dim_num = 3;

  tetra(1:dim_num,1:4) = [ ...
    p1(1:dim_num); p2(1:dim_num); p3(1:dim_num); p4(1:dim_num) ]';

  [ r, center ] = tetrahedron_circumsphere ( tetra );

  return
end
