jitter_u = jitter_u / (lightsource.Area_Size1 - 1) - 0.5;//removed small offset
jitter_v = jitter_v / (lightsource.Area_Size2 - 1) - 0.5;
//fix angular distribution [SC 4/2013]
if(jitter_u!=0 && jitter_v!=0){//save time by not doing anything that is not necessary
  //remember signs
  int usign=jitter_u>0?1:-1;
  int vsign=jitter_v>0?1:-1;
  jitter_u=fabs(jitter_u);//avoid taking absolute values many times after
  jitter_v=fabs(jitter_v);
  if(jitter_u==jitter_v){//diagonals: a shortcut to avoid expensive division and (fake) trigonometry
    jitter_u*=usign*sqrt(0.5);
    jitter_v*=vsign*sqrt(0.5);
  }else
    if(jitter_u>jitter_v){
      double radius=jitter_u;
      //map tangent of the angle to direct angle.
      double phi=0.25*M_PI*jitter_v/jitter_u;
      double phi2=phi*phi;
      jitter_u=usign*radius*(1-0.5*phi2);//cosine approximation (max 1.5% error)
      jitter_v=vsign*radius*phi*(1-(1/6.)*phi2);//sine approximation (max 0.25% error)
    }else{
      double radius=jitter_v;
      //map tangent of the angle to direct angle.
      double phi=0.25*M_PI*jitter_u/jitter_v;
      double phi2=phi*phi;
      jitter_u=usign*radius*phi*(1-(1/6.)*phi2);
      jitter_v=vsign*radius*(1-0.5*phi2);
    }
 }
