To find a sphere's screen radius+area you need to first calculate the inverse secant of your sphere, which is: asec = acos( 1.0f / ( dist / rad ) ); where dist is the distance from the camera to the sphere's centre, and rad is the radius of the sphere. From this you can find the radius of the visible sphere section: sin( asec ) * rad.
To then find the on-screen radius of this use:
// You may want to replace the types: f32 = float, vec3f = D3DXVECTOR3, mat4 = D3DXMATRIX, Camera = GDK camera wrapper, point = position of sphere
f32 SizeOnScreen( const vec3f& point, f32 radius, const Camera& camera )
{
vec4f transformation;
mat4 viewProjection = dbGetViewMatrix( camera.GetID() ) * dbGetProjectionMatrix( camera.GetID() );
f32 hScreenHeight = float( dbScreenHeight() ) * 0.5f,
projection_m11 = dbGetProjectionMatrix( camera.GetID() )._11;
D3DXVec3Transform( transformation, point, &viewProjection );
return radius * ( projection_m11 / transformation.w ) * hScreenHeight;
}