function VektorNorm(vv)
{
  var sum = 0;
  var i;

  for (i = 1; i <= 3; ++i) {sum = sum + vv[i]*vv[i]}
  sum = Math.sqrt(sum);
  if (sum > 0) {
    for (i = 1; i <= 3; ++i) {vv[i] = vv[i] / sum}
  }
  return vv;
}


function RaumDreh(x,y,z,al,be,ga,sx,sy,sz,xt,yt,zt)
{
  var c,s,xx,yy,zz;

  if (al != 0) {                                 /* Drehung um Z-Achse */
    c = Math.cos(al); s = Math.sin(al); xx = x*c+y*s; yy = -x*s+y*c; x = xx; y = yy;
  }
  if (be != 0) {                                 /* Drehung um Y-Achse */
    c = Math.cos(be); s = Math.sin(be); xx = x*c-z*s; zz =  x*s+z*c; x = xx; z = zz;
  }
  if (ga != 0) {                                 /* Drehung um X-Achse */
    c = Math.cos(ga); s = Math.sin(ga); yy = y*c+z*s; zz = -y*s+z*c; y = yy; z = zz;
  }
  RD[1] = (x*sx)+xt;                             /* Skalierung und Translation */
  RD[2] = (y*sy)+yt;
  RD[3] = (z*sz)+zt;
}


function geometrie()
{
  var i,j,lg;
  var acm = new Array(31);
    for (i = 0; i < acm.length; ++i) acm[i] = new Array(4);
  var vv = new Array(4);
  var vs = new Array(dat+1);
    for (i = 0; i < vs.length; ++i) vs[i] = new Array(4);

  /*** Frau ***/
	 for (i = 1; i <= 3; ++i) {acm[ 1][i] =                       acd[ 1][i]+acd[ 2][i]};
  for (i = 1; i <= 3; ++i) {acm[ 2][i] =                                  acd[ 2][i]};
  for (i = 1; i <= 3; ++i) {acm[ 3][i] =                                  acd[ 3][i]};
  for (i = 1; i <= 3; ++i) {acm[ 4][i] =                       acd[ 4][i]+acd[ 3][i]};
  for (i = 1; i <= 3; ++i) {acm[ 5][i] =            acd[ 5][i]+acd[ 4][i]+acd[ 3][i]};
  for (i = 1; i <= 3; ++i) {acm[ 6][i] = acd[ 6][i]+acd[ 5][i]+acd[ 4][i]+acd[ 3][i]};
  for (i = 1; i <= 3; ++i) {acm[ 7][i] =                       acd[ 7][i]+acd[ 3][i]};
  for (i = 1; i <= 3; ++i) {acm[ 8][i] =            acd[ 8][i]+acd[ 7][i]+acd[ 3][i]};
  for (i = 1; i <= 3; ++i) {acm[ 9][i] = acd[ 9][i]+acd[ 8][i]+acd[ 7][i]+acd[ 3][i]};
  for (i = 1; i <= 3; ++i) {acm[10][i] =                       acd[10][i]+acd[ 2][i]};
  for (i = 1; i <= 3; ++i) {acm[11][i] =            acd[11][i]+acd[10][i]+acd[ 2][i]};
  for (i = 1; i <= 3; ++i) {acm[12][i] = acd[12][i]+acd[11][i]+acd[10][i]+acd[ 2][i]};
  for (i = 1; i <= 3; ++i) {acm[13][i] =                       acd[13][i]+acd[ 2][i]};
  for (i = 1; i <= 3; ++i) {acm[14][i] =            acd[14][i]+acd[13][i]+acd[ 2][i]};
  for (i = 1; i <= 3; ++i) {acm[15][i] = acd[15][i]+acd[14][i]+acd[13][i]+acd[ 2][i]};

  /*** Mann ***/
  for (i = 1; i <= 3; ++i) {acm[16][i] =                       acd[16][i]+acd[17][i]};
  for (i = 1; i <= 3; ++i) {acm[17][i] =                                  acd[17][i]};
  for (i = 1; i <= 3; ++i) {acm[18][i] =                                  acd[18][i]};
  for (i = 1; i <= 3; ++i) {acm[19][i] =                       acd[19][i]+acd[18][i]};
  for (i = 1; i <= 3; ++i) {acm[20][i] =            acd[20][i]+acd[19][i]+acd[18][i]};
  for (i = 1; i <= 3; ++i) {acm[21][i] = acd[21][i]+acd[20][i]+acd[19][i]+acd[18][i]};
  for (i = 1; i <= 3; ++i) {acm[22][i] =                       acd[22][i]+acd[18][i]};
  for (i = 1; i <= 3; ++i) {acm[23][i] =            acd[23][i]+acd[22][i]+acd[18][i]};
  for (i = 1; i <= 3; ++i) {acm[24][i] = acd[24][i]+acd[23][i]+acd[22][i]+acd[18][i]};
  for (i = 1; i <= 3; ++i) {acm[25][i] =                       acd[25][i]+acd[17][i]};
  for (i = 1; i <= 3; ++i) {acm[26][i] =            acd[26][i]+acd[25][i]+acd[17][i]};
  for (i = 1; i <= 3; ++i) {acm[27][i] = acd[27][i]+acd[26][i]+acd[25][i]+acd[17][i]};
  for (i = 1; i <= 3; ++i) {acm[28][i] =                       acd[28][i]+acd[17][i]};
  for (i = 1; i <= 3; ++i) {acm[29][i] =            acd[29][i]+acd[28][i]+acd[17][i]};
  for (i = 1; i <= 3; ++i) {acm[30][i] = acd[30][i]+acd[29][i]+acd[28][i]+acd[17][i]};

  for (i = 1; i <= dat; ++i)     /* Verschiebung Pkt im jeweiligen Csy */
  {
    lg = Math.sqrt((org[i][1]*org[i][1]) + (org[i][2]*org[i][2]) + (org[i][3]*org[i][3]));
    for (j = 1; j <= 3; ++j) vv[j] = org[i][j]; VektorNorm(vv);

    RaumDreh(vv[1],vv[2],vv[3],           0.0,           0.0,acm[cpc[i]][3],1.0,1.0,1.0,0.0,0.0,0.0); for (j=1;j<=3;++j) vv[j]=RD[j]; /* um X-Achse */
    RaumDreh(vv[1],vv[2],vv[3],           0.0,acm[cpc[i]][2],           0.0,1.0,1.0,1.0,0.0,0.0,0.0); for (j=1;j<=3;++j) vv[j]=RD[j]; /* um Y-Achse */
    RaumDreh(vv[1],vv[2],vv[3],acm[cpc[i]][1],           0.0,           0.0,1.0,1.0,1.0,0.0,0.0,0.0); for (j=1;j<=3;++j) vv[j]=RD[j]; /* um Z-Achse */

    for (j = 1; j <= 3; ++j) {vs[i][j] = vv[j]*lg - org[i][j]};
  }

  for (i = 1; i <= dat; ++i) {
    for (j = 1; j <= 3; ++j) xyz[i][j] = csy[cpc[i]][j] + org[i][j];
  }

                   /*** Frau ***/

  for (i = 1; i <= 3; ++i) xyz[ 1][i] = xyz[ 1][i]                    +vs[ 1][i]+vs[ 3][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[ 2][i] = xyz[ 2][i]                    +vs[ 2][i]+vs[ 3][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[ 3][i] = xyz[ 3][i]                              +vs[ 3][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[ 4][i] = xyz[ 4][i]                                        +vs[ 4][i]+acv[1][i];

  for (i = 1; i <= 3; ++i) xyz[ 5][i] = xyz[ 5][i]                              +vs[ 5][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[ 6][i] = xyz[ 6][i]                    +vs[ 6][i]+vs[ 5][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[ 7][i] = xyz[ 7][i]          +vs[ 7][i]+vs[ 6][i]+vs[ 5][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[ 8][i] = xyz[ 8][i]+vs[ 8][i]+vs[ 7][i]+vs[ 6][i]+vs[ 5][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[41][i] = xyz[41][i]+vs[41][i]+vs[ 7][i]+vs[ 6][i]+vs[ 5][i]+vs[ 4][i]+acv[1][i];

  for (i = 1; i <= 3; ++i) xyz[ 9][i] = xyz[ 9][i]                              +vs[ 9][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[10][i] = xyz[10][i]                    +vs[10][i]+vs[ 9][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[11][i] = xyz[11][i]          +vs[11][i]+vs[10][i]+vs[ 9][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[12][i] = xyz[12][i]+vs[12][i]+vs[11][i]+vs[10][i]+vs[ 9][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[42][i] = xyz[42][i]+vs[42][i]+vs[11][i]+vs[10][i]+vs[ 9][i]+vs[ 4][i]+acv[1][i];

  for (i = 1; i <= 3; ++i) xyz[13][i] = xyz[13][i]                              +vs[13][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[14][i] = xyz[14][i]                    +vs[14][i]+vs[13][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[15][i] = xyz[15][i]          +vs[15][i]+vs[14][i]+vs[13][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[16][i] = xyz[16][i]+vs[16][i]+vs[15][i]+vs[14][i]+vs[13][i]+vs[ 4][i]+acv[1][i];

  for (i = 1; i <= 3; ++i) xyz[17][i] = xyz[17][i]                              +vs[17][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[18][i] = xyz[18][i]                    +vs[18][i]+vs[17][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[19][i] = xyz[19][i]          +vs[19][i]+vs[18][i]+vs[17][i]+vs[ 4][i]+acv[1][i];
  for (i = 1; i <= 3; ++i) xyz[20][i] = xyz[20][i]+vs[20][i]+vs[19][i]+vs[18][i]+vs[17][i]+vs[ 4][i]+acv[1][i];


                   /*** Mann ***/

  for (i = 1; i <= 3; ++i) xyz[21][i] = xyz[21][i]                    +vs[21][i]+vs[23][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[22][i] = xyz[22][i]                    +vs[22][i]+vs[23][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[23][i] = xyz[23][i]                              +vs[23][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[24][i] = xyz[24][i]                                        +vs[24][i]+acv[2][i];

  for (i = 1; i <= 3; ++i) xyz[25][i] = xyz[25][i]                              +vs[25][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[26][i] = xyz[26][i]                    +vs[26][i]+vs[25][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[27][i] = xyz[27][i]          +vs[27][i]+vs[26][i]+vs[25][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[28][i] = xyz[28][i]+vs[28][i]+vs[27][i]+vs[26][i]+vs[25][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[43][i] = xyz[43][i]+vs[43][i]+vs[27][i]+vs[26][i]+vs[25][i]+vs[24][i]+acv[2][i];

  for (i = 1; i <= 3; ++i) xyz[29][i] = xyz[29][i]                              +vs[29][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[30][i] = xyz[30][i]                    +vs[30][i]+vs[29][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[31][i] = xyz[31][i]          +vs[31][i]+vs[30][i]+vs[29][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[32][i] = xyz[32][i]+vs[32][i]+vs[31][i]+vs[30][i]+vs[29][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[44][i] = xyz[44][i]+vs[44][i]+vs[31][i]+vs[30][i]+vs[29][i]+vs[24][i]+acv[2][i];

  for (i = 1; i <= 3; ++i) xyz[33][i] = xyz[33][i]                              +vs[33][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[34][i] = xyz[34][i]                    +vs[34][i]+vs[33][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[35][i] = xyz[35][i]          +vs[35][i]+vs[34][i]+vs[33][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[36][i] = xyz[36][i]+vs[36][i]+vs[35][i]+vs[34][i]+vs[33][i]+vs[24][i]+acv[2][i];

  for (i = 1; i <= 3; ++i) xyz[37][i] = xyz[37][i]                              +vs[37][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[38][i] = xyz[38][i]                    +vs[38][i]+vs[37][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[39][i] = xyz[39][i]          +vs[39][i]+vs[38][i]+vs[37][i]+vs[24][i]+acv[2][i];
  for (i = 1; i <= 3; ++i) xyz[40][i] = xyz[40][i]+vs[40][i]+vs[39][i]+vs[38][i]+vs[37][i]+vs[24][i]+acv[2][i];



  for (i = 1; i <= 3; ++i) xyz[45][i] = (xyz[ 5][i]+xyz[ 9][i])/2.0;
  for (i = 1; i <= 3; ++i) xyz[46][i] = (xyz[25][i]+xyz[29][i])/2.0;
  for (i = 1; i <= 3; ++i) xyz[47][i] = (xyz[ 1][i]+xyz[ 2][i])/2.0;
  for (i = 1; i <= 3; ++i) xyz[48][i] = (xyz[21][i]+xyz[22][i])/2.0;
  for (i = 1; i <= 3; ++i) xyz[49][i] = (xyz[ 4][i]+xyz[24][i])/2.0;
}


function AbsGeoDreh()
{
  var vf = new Array(4);
  var vm = new Array(4);
  var i,lgf,lgm;

  for (i = 1; i <= 3; ++i) vf[i]=xyz[ 4][i]-xyz[49][i];
  for (i = 1; i <= 3; ++i) vm[i]=xyz[24][i]-xyz[49][i];
  lgf=Math.sqrt((vf[1]*vf[1])+(vf[2]*vf[2])+(vf[3]*vf[3])); VektorNorm(vf);
  lgm=Math.sqrt((vm[1]*vm[1])+(vm[2]*vm[2])+(vm[3]*vm[3])); VektorNorm(vm);

  for (i = 1; i <= 3; ++i) acv[1][i]=acv[1][i]-vf[i]*lgf;
  for (i = 1; i <= 3; ++i) acv[2][i]=acv[2][i]-vm[i]*lgm;
  RaumDreh(vf[1],vf[2],vf[3],AbsWkl,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0); for (i = 1; i <= 3; ++i) vf[i]=RD[i]; /* um Z-Achse */
  RaumDreh(vm[1],vm[2],vm[3],AbsWkl,0.0,0.0,1.0,1.0,1.0,0.0,0.0,0.0); for (i = 1; i <= 3; ++i) vm[i]=RD[i]; /* um Z-Achse */
  for (i = 1; i <= 3; ++i) acv[1][i]=acv[1][i]+vf[i]*lgf;
  for (i = 1; i <= 3; ++i) acv[2][i]=acv[2][i]+vm[i]*lgm;
  geometrie();
  AbsDreh=false;
}


function nullvar()
{
  var i,j;

	 for (i = 1; i <= dat; ++i) {
  	 for (j = 1; j <= 3; ++j) xyz[i][j] = org[i][j] + csy[cpc[i]][j];
	 }
	 for (i = 1; i <= 2; ++i) {
  	 for (j = 1; j <= 3; ++j) acv[i][j] = 0.0;
	 }
	 for (i = 1; i <= 30; ++i) {
  	 for (j = 1; j <= 3; ++j) acd[i][j] = 0.0;
	 }
  geometrie();
  gal =  8.0*Math.PI/36.0;
  gga = -1.0*Math.PI/36.0;
}
