コード例 #1
0
void OpMatrixMatrix (TomVM& vm) {

    // Matrix * Matrix
    // Left matrix at reg2, right matrix at reg1
    if (!ReadMatrix (vm, vm.Reg2 ().IntVal (), m1)
    ||  !ReadMatrix (vm, vm.Reg  ().IntVal (), m2))
        return;

    // Multiply them out
    vmReal result [16];
    MatrixTimesMatrix (m1, m2, result);

    // Return as temporary matrix
    vm.Reg ().IntVal () = FillTempRealArray2D (vm.Data (), vm.DataTypes (), 4, 4, result);
}
コード例 #2
0
ファイル: MathTool.cpp プロジェクト: dwent/MEFTop
/*-------------------------------------------------------------------------------------
 * this function is rotation: vector v1 rotate to vector v0 needs the matrix
 * 
 * [v1x,v1y,v1z]^T = M * [v0x,v0y,v0z]^T
 	v0 is the target vector, v1 is the vector to be rotated.
 * ----------------------------------------------------------------------------------*/
void
VectorRotation (double v0[3], double v1[3], double matrix[9])
{
  int i, j;
  double matrix0[3][3], matrix1[3][3], tmp0[9], tmp1[9], tmp[9];


  RotateMatrix_z (v0[0], v0[1], v0[2], matrix0);
  RotateMatrix_z (v1[0], v1[1], v1[2], matrix1);

  for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 3; j++)
	{
	  tmp0[i * 3 + j] = matrix0[i][j];
	  tmp1[i * 3 + j] = matrix1[i][j];
	}
    }


  i = 0;
  GaussInverse3 (tmp1, 10e-14, &i);
  
/*  if (i==0)
  {
  printf("the matrix is singular\n");
  exit(0);
  
  }
  
 */
  
  MatrixTimesMatrix (tmp0, tmp1, tmp, 3, 3, 3);

  for (i = 0; i < 3; i++)
    {
      for (j = 0; j < 3; j++)
	{
	  matrix[i * 3 + j] = tmp[j * 3 + i];
	}
    }


}