function [ p, seed ] = tetrahedron_sample_3d ( t, n, seed )

%*****************************************************************************80
%
%% TETRAHEDRON_SAMPLE_3D returns random points in a tetrahedron.
%
%  Licensing:
%
%    This code is distributed under the GNU LGPL license.
%
%  Modified:
%
%    12 November 2010
%
%  Author:
%
%    John Burkardt
%
%  Parameters:
%
%    Input, real T(3,4), the tetrahedron vertices.
%
%    Input, integer N, the number of points to generate.
%
%    Input, integer SEED, a seed for the random number generator.
%
%    Output, real P(3,N), random points in the tetrahedron.
%
%    Output, integer SEED, a seed for the random number generator.
%
  dim_num = 3;

  for j = 1 : n

    [ r, seed ] = r8_uniform_01 ( seed );
%
%  Interpret R as a percentage of the tetrahedron's volume.
%
%  Imagine a plane, parallel to face 1, so that the volume between
%  vertex 1 and the plane is R percent of the full tetrahedron volume.
%
%  The plane will intersect sides 12, 13, and 14 at a fraction
%  ALPHA = R^1/3 of the distance from vertex 1 to vertices 2, 3, and 4.
%
    alpha = r.^( 1.0 / 3.0 );
%
%  Determine the coordinates of the points on sides 12, 13 and 14 intersected
%  by the plane, which form a triangle TR.
%
    tr(1:dim_num,1) =         alpha   * t(1:dim_num,1) ...
                    + ( 1.0 - alpha ) * t(1:dim_num,2);

    tr(1:dim_num,2) =         alpha   * t(1:dim_num,1) ...
                    + ( 1.0 - alpha ) * t(1:dim_num,3);

    tr(1:dim_num,3) =         alpha   * t(1:dim_num,1) ...
                    + ( 1.0 - alpha ) * t(1:dim_num,4);
%
%  Now choose, uniformly at random, a point in this triangle.
%
    [ r, seed ] = r8_uniform_01 ( seed );
%
%  Interpret R as a percentage of the triangle's area.
%
%  Imagine a line L, parallel to side 1, so that the area between
%  vertex 1 and line L is R percent of the full triangle's area.
%
%  The line L will intersect sides 2 and 3 at a fraction
%  ALPHA = SQRT ( R ) of the distance from vertex 1 to vertices 2 and 3.
%
    alpha = sqrt ( r );
%
%  Determine the coordinates of the points on sides 2 and 3 intersected
%  by line L.
%
    p12(1:dim_num) =         alpha   * tr(1:dim_num,1) ...
                   + ( 1.0 - alpha ) * tr(1:dim_num,2);

    p13(1:dim_num) =         alpha   * tr(1:dim_num,1) ...
                   + ( 1.0 - alpha ) * tr(1:dim_num,3);
%
%  Now choose, uniformly at random, a point on the line L.
%
    [ beta, seed ] = r8_uniform_01 ( seed );

    p(1:dim_num,j) =         beta   * p12(1:dim_num) ...
                   + ( 1.0 - beta ) * p13(1:dim_num);

  end

  return
end
