示例#1
0
void transMatrix(Matrix m,float x,float y, float z)
{
  idMatrix(m);
  m[3][0] = (float) x;
  m[3][1] = (float) y;
  m[3][2] = (float) z;
}
示例#2
0
void rotMatrix(Matrix m, char ax, float th)
{
  idMatrix(m);
  float s = (float) sin(th);
  float c = (float) cos(th);

	switch(toupper(ax)) {
		case 'Z' :
		  m[0][0] = c;
		  m[0][1] = -s;
		  m[1][0] = s;
		  m[1][1] = c;
		  break;
		case 'Y' :
		  m[0][0] = c;
		  m[0][2] = -s;
		  m[2][0] = s;
		  m[2][2] = c;
		  break;
		case 'X' :
		  m[1][1] = c;
		  m[1][2] = -s;
		  m[2][1] = s;
		  m[2][2] = c;
		  break;
		default:
		  printf("Bad axis to rotMatrix");
	}

}
示例#3
0
void rotMatrix(Matrix m, float th)
{
  idMatrix(m);
  float s = (float) sin(th);
  float c = (float) cos(th);

  m[0][0] = c;
  m[0][1] = -s;
  m[1][0] = s;
  m[1][1] = c;
}
示例#4
0
int simpleInvert(double* const c, double* const b, double* const a, int m){
  //ищем обратный к блоку размера m*m
  //double eps = 2e-16;//для гильбертовой  
  const double eps = 1e-8;//обычно хватает
  //const double eps = (m<20)?1e-28:1e-8;
  const int size = m*m;
  double temp;
  int i, j, k;
  int p=0;
  double tryMain=0.;  
  if(m<=0){
    //printf("Tryin to invert empty matrix; bad boy\n\t--simpleInvert\n");
    return 1;
  }
  if(m==1){
    if(fabs(c[0])>eps){
      b[0]=1./c[0];
      return 0;
    }
    else{
      return 1;
    }
  }

  idMatrix(b, m);
  copyMatrix(c, a, size);//забекапились
  for (i=0; i<m; ++i){
    //цикл по подматрицам
    temp=0.;
    for (j=i; j<m; ++j){
      tryMain=fabs(a[j*m+i]);
      if (tryMain>temp){
	temp=tryMain;
	p=j;
      }
    }
    if (temp<eps){
      return 1;
    }
    for (j=i; j<m; ++j){
      //std::swap(a[i*m+j], a[p*m+j]);
      temp = a[i*m+j];
      a[i*m+j] = a[p*m+j];
      a[p*m+j] = temp;
    }
    for (j=0; j<m; ++j){
      //std::swap(b[i*m+j], b[p*m+j]);
      temp = b[i*m+j];
      b[i*m+j] = b[p*m+j];
      b[p*m+j] = temp;
    }   
    temp=1./a[i*m+i];
    for (j=i+1; j<m; ++j){
      a[i*m+j]*=temp;
    }
    for (j=0; j<m; ++j){
      b[i*m+j]*=temp;
    }
    for (j=i+1; j<m; ++j){//из j-й строчки вычитаем i-ю      
      temp=a[j*m+i];//если раскомментить, то ничего не будет.
      for (k=0; k<m; ++k){
        b[j*m+k]-=b[i*m+k]*temp;
      }
      for (k=i+1; k<m; ++k){
        a[j*m+k]-=a[i*m+k]*temp;
      }
    }
  
  /*else{
    return 1;
    }*/
  }
  for (i=m-1; i>0; --i){//строчку с номером i вычитаем из
    for (j=i-1; j>=0; --j){//первых (i-1) строчек
      temp = a[j*m+i];
      for(k=0; k<m; ++k){
        b[j*m+k]-=b[i*m+k]*temp;
      }
    }
  }
  return 0;
}
示例#5
0
void transMatrix(Matrix m,float x,float y)
{
  idMatrix(m);
  m[3][0] = (float) x;
  m[3][1] = (float) y;
}