/* Toutes ces fonctions de gestions des nombres complexes ont été crées pas Frédéric WANG,
 vous pouvez les trouver sur le site « Maths, Informatique, Jeux ».

Les nombres complexes de la forme a + ib sont codés sous la forme d'un tableau (a,b)

Date de création : dimanche 25 juillet 2004
Dernière mise à jour : samedi 22 octobre 2005 */

/* Convertit un nombre en nombre complexe.*/
function cmp(z){if(z.length+0==2)return z; else return new Array(z,0);}

/* Retourne l'écriture d'un complexe sous la forme a + ib */
function ecrire(z)
{
var k=document.getElementById("n_chiffre").selectedIndex;// Nombre de chiffres après la virgule
var zz=cmp(z);zz[0]=arrondi(zz[0],k);zz[1]=arrondi(zz[1],k);
return (zz[0]||zz[1])?((zz[0]!=0?zz[0]:"")+(zz[0]!=0&&zz[1]!=0?" + ":"")+(zz[1]!=0?zz[1]+" × i":"")):0;
}

/* Retourne l'arrondi d'un nombre */
function arrondi(x,k)
{
k=Math.pow(10,k);return Math.round(x*k)/k;
}

/* Opposé, inverse, conjugué, module, argument d'un nombre complexe */
function opp(z){z=cmp(z);return new Array(-z[0],-z[1]);}
function inv(z){z=cmp(z);return pr(new Array(conj(z),1/Math.pow(mod(z),2)));}
function conj(z){z=cmp(z);return new Array(z[0],-z[1]);}
function mod(z){z=cmp(z);return Math.sqrt(Math.pow(z[0],2)+Math.pow(z[1],2));}
function arg(z){z=cmp(z);return (z[1]<0?-1:1)*(Math.acos(z[0]/mod(z)));}

/* (modu,argu) => (a,b) */
function a_ib(modu,argu)
{
var a=arrondi(modu*Math.cos(argu),10),b=arrondi(modu*Math.sin(argu),10);
return new Array(a,b);
}

/* Retourne une somme de nombres complexes */
function so(lz)
{
var zz=cmp(0);
for(var a=0;a<lz.length;a++)
  {
  lz[a]=cmp(lz[a]);
  zz[0]+=lz[a][0];// Partie réelle
  zz[1]+=lz[a][1];// Partie imaginaire
  }
return zz;
}

/* Retourne un produit de nombres complexes */
function pr(lz)
{
var modu=1,argu=0;
for(var a=0;a<lz.length;a++)
  {
  if(mod(lz[a])==0)return cmp(0);
  modu*=mod(lz[a]);
  argu+=arg(lz[a]);
  }
return a_ib(modu,argu);
}

/* Retourne z à la puissance x */
function pui(z,x)
{
z=cmp(z);if(mod(z)==0)return cmp(0);
var modu=Math.pow(mod(z),x);var argu=x*arg(z);
return a_ib(modu,argu);
}

