Beispiel #1
0
int main(int argc, char const *argv[])
{

	Matrix a = matrixNew(555555, 2);
	Matrix b = matrixNew(2, 555555);
	//Matrix b = matrixNew(100, 100);
	for (int i = 0; i < matrixGetRows(a); i++) {
		for (int j = 0; j < matrixGetCols(a); j++) {
			//printf("%d ", (i + 5));		
			matrixSet(a, i, j, (float) (i + 5));		
		}
	//	printf("\n");
	}
	for (int i = 0; i < matrixGetRows(b); i++) {
		for (int j = 0; j < matrixGetCols(b); j++) {
			matrixSet(b, i, j, (float) 1.);		
		}
	}
	//printMatrix(a);
	//printMatrix(b);
	Matrix c = matrixMul(a, b);
	//Matrix c = matrixNew(9, 13);
	printf("\n%d\n-----", (int) c);
	printMatrix(c);	
	return 0;
}
Beispiel #2
0
/// tests Matrix4 multiply method
TEST_F(Math_Matrix4Tests, Multiply)
{
    // Identity test
    matrixSet(i, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
    matrixSet(m, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
    Matrix4 i_check(i);
    Matrix4 m_check(m);
    actual.multiply(i, m);
    ASSERT_MATRIX_EQ(m, actual);

    // Identity test 2
    actual.multiply(m, i);
    ASSERT_MATRIX_EQ(m, actual);

    // setup matrices
    matrixSet(m1, 5,-71,-13,86,-86,-8,-62,8,-69,-106,81,125,-1,-52,84,47);
    Matrix4 m1_check(m1);
    matrixSet(m2, -92,-59,-55,-91,47,-86,-93,-32,19,126,44,92,32,112,119,-94);
    Matrix4 m2_check(m2);
    matrixSet(expected, 8500,17566,-7245,-19536,14080,8873,-5500,-9775,-13869,
              -11805,3233,12466,-17589,-10894,-5617,14105);
              
    // perform test
    actual.multiply(m1,m2);
    ASSERT_MATRIX_EQ(expected, actual);
    
    // perform tests to ensure read-only memory didn't fail
    ASSERT_MATRIX_EQ(m1_check, m1);
    ASSERT_MATRIX_EQ(m2_check, m2);
}
Beispiel #3
0
/// tests Matrix4 multiply and assign method
TEST_F(Math_Matrix4Tests, MultiplyAndAssign)
{
    // setup matrices
    matrixSet(actual, 5,-71,-13,86,-86,-8,-62,8,-69,-106,81,125,-1,-52,84,47);
    matrixSet(m1, -92,-59,-55,-91,47,-86,-93,-32,19,126,44,92,32,112,119,-94);
    matrixSet(expected, 8500,17566,-7245,-19536,14080,8873,-5500,-9775,-13869,
              -11805,3233,12466,-17589,-10894,-5617,14105);
              
    // perform test
    actual.multiply(m1);
    ASSERT_MATRIX_EQ(actual,expected);
}
Beispiel #4
0
Matrix *matrixAdd (const Matrix *a, const Matrix *b)
{
  Matrix *result;
  int column = a->columns, row = a->rows;

  if (a->columns != b->columns && a->rows != b->rows)
    return NULL;

  result = matrixAlloc (a->rows, a->columns);

  /* cycle through all rows */
  for (row = 0 ; row < a->rows ; row++)
    {
      /* cycle through all columns */
      for (column = 0 ; column < a->columns ; column++)
        {
          int val_1 = matrixGet (a, row, column);
          int val_2 = matrixGet (b, row, column);
          int val_res = val_1 / val_2;

          matrixSet (result, row, column, val_res);
        }
    }

  return result;
}
Beispiel #5
0
Matrix *matrixMul (const Matrix *a, const Matrix *b)
{
  int column = 0, row = 0, c = 0;
  Matrix *retval;

  if (a->columns != b->rows && a->rows > b->rows)
    {
      const Matrix *tmp;
      tmp = a;
      a = b;
      b = tmp;
    }

  if (a->columns != b->rows)
    return NULL;

  retval = matrixAlloc (a->rows , b->columns);

  for (; column < b->columns; column++)
    {
      for (row = 0; row < a->rows; row++)
        {
          double val = 0;
          for (c = 0; c < a->columns; c++)
            {
              val += matrixGet (a, row, c) * matrixGet (b, c, column);
            }

          matrixSet (retval, row, column, val);
        }
    }
  return retval;
}
Beispiel #6
0
int main()
{
    printf("Testing work:\n");
    int n = 9;
    int m = 1;
    Matrix a = matrixNew(n, m);
    for (int i = 0; i < matrixGetRows(a); i++)
        for (int j = 0; j < matrixGetCols(a); j++)
            matrixSet(a, i, j, (float)(i + 1) / (j + 1));
    for (int i = 0; i < matrixGetRows(a); i++)
    {
        for (int j = 0; j < matrixGetCols(a); j++)
            printf("%.5f ", matrixGet(a, i, j));
        printf("\n");
    }
    printf("\n");
    Matrix b = matrixScale(a, 10);
    for (int i = 0; i < matrixGetRows(b); i++)
    {
        for (int j = 0; j < matrixGetCols(b); j++)
            printf("%.5f ", matrixGet(b, i, j));
        printf("\n");
    }
    printf("\n");
    Matrix c = matrixAdd(a, b);
    for (int i = 0; i < matrixGetRows(c); i++)
    {
        for (int j = 0; j < matrixGetCols(c); j++)
            printf("%.5f ", matrixGet(c, i, j));
        printf("\n");
    }
    printf("\n");
    Matrix d = matrixTranspose(c);
    for (int i = 0; i < matrixGetRows(d); i++)
    {
        for (int j = 0; j < matrixGetCols(d); j++)
            printf("%.5f ", matrixGet(d, i, j));
        printf("\n");
    }

    /*c = matrixAdd(a, matrixNew(1, 1));
    if (c == NULL)
        printf("Yeah\n"), c = matrixNew(3, 3);*/
    Matrix e = matrixMul(c, d);
    printf("%i %i\n", matrixGetRows(e), matrixGetCols(e));
    for (int i = 0; i < matrixGetRows(e); i++)
    {
        for (int j = 0; j < matrixGetCols(e); j++)
            printf("%.5f ", matrixGet(e, i, j));
        printf("\n");
    }
    matrixDelete(a);
    matrixDelete(b);
    matrixDelete(c);
    matrixDelete(d);
    matrixDelete(e);
	return 0;
}
Beispiel #7
0
/// tests Matrix4 createScaleMatrix
TEST_F(Math_Matrix4Tests, ScaleMatrix)
{
    actual.createScaleMatrix(1.1f, 2.2f, 3.3f);
    matrixSet(expected, 1.1f,0,0,0,
                        0,2.2f,0,0,
                        0,0,3.3f,0,
                        0,0,0,1);
    ASSERT_MATRIX_EQ(actual, expected);
}
Beispiel #8
0
/// tests Matrix4 createTranslationMatrix
TEST_F(Math_Matrix4Tests, TranslationMatrix)
{
    actual.createTranslationMatrix(1.1f, 2.2f, 3.3f);
    matrixSet(expected, 1,0,0,0,
                        0,1,0,0,
                        0,0,1,0,
                        1.1f,2.2f,3.3f,1);
    ASSERT_MATRIX_EQ(actual, expected);
}
Beispiel #9
0
Matrix *matrixCopy (const Matrix *matrix)
{
  Matrix *retval;
  int column = matrix->columns, row = matrix->rows;

  retval = matrixAlloc (matrix->rows, matrix->columns);

  while (--row >=0)
    {
      column = matrix->columns;
      while (--column >= 0)
        matrixSet (retval, row, column,
                   matrixGet (matrix, row, column));
    }

  return retval;
}