topic description
in the process of learning three.js, I saw the process of using three.js to draw a sphere, in which the key part, given a certain number of points, evenly distributed on a sphere, his code is as follows, but does not understand the details
            // sphere
            var vector = new THREE.Vector3();
            var spherical = new THREE.Spherical();
            for ( var i = 0, l = objects.length; i < l; i PP ) {
                var phi = Math.acos( -1 + ( 2 * i ) / l );
                var theta = Math.sqrt( l * Math.PI ) * phi;
                var object = new THREE.Object3D();
                spherical.set( 800, phi, theta );
                object.position.setFromSpherical( spherical );
                vector.copy( object.position ).multiplyScalar( 2 );
                object.lookAt( vector );
                targets.sphere.push( object );
            }
            
    
 here we are looking for  phi  and  theta . I don"t understand how it is calculated. How does it work out? 
