code: function ( face, geometry, useCachedAreas ) {
  
  		var vA, vB, vC, vD;
  
  		if ( face instanceof THREE.Face3 ) {
  
  			vA = geometry.vertices[ face.a ];
  			vB = geometry.vertices[ face.b ];
  			vC = geometry.vertices[ face.c ];
  
  			return THREE.GeometryUtils.randomPointInTriangle( vA, vB, vC );
  
  		} else if ( face instanceof THREE.Face4 ) {
  
  			vA = geometry.vertices[ face.a ];
  			vB = geometry.vertices[ face.b ];
  			vC = geometry.vertices[ face.c ];
  			vD = geometry.vertices[ face.d ];
  
  			var area1, area2;
  
  			if ( useCachedAreas ) {
  
  				if ( face._area1 && face._area2 ) {
  
  					area1 = face._area1;
  					area2 = face._area2;
  
  				} else {
  
  					area1 = THREE.GeometryUtils.triangleArea( vA, vB, vD );
  					area2 = THREE.GeometryUtils.triangleArea( vB, vC, vD );
  
  					face._area1 = area1;
  					face._area2 = area2;
  
  				}
  
  			} else {
  
  				area1 = THREE.GeometryUtils.triangleArea( vA, vB, vD ),
  				area2 = THREE.GeometryUtils.triangleArea( vB, vC, vD );
  
  			}
  
  			var r = THREE.GeometryUtils.random() * ( area1 + area2 );
  
  			if ( r < area1 ) {
  
  				return THREE.GeometryUtils.randomPointInTriangle( vA, vB, vD );
  
  			} else {
  
  				return THREE.GeometryUtils.randomPointInTriangle( vB, vC, vD );
  
  			}
  
  		}
  
  	}
docs: Get random point in face (triangle / quad) (uniform distribution)