ISCE_INSAR/library/isceLib/src/LinAlg.cpp

61 lines
1.4 KiB
C++
Raw Normal View History

2019-01-16 19:40:08 +00:00
//
// Author: Joshua Cohen
// Copyright 2017
//
#include <math.h>
#include "LinAlg.h"
using isceLib::LinAlg;
LinAlg::LinAlg() {
return;
}
void LinAlg::cross(double u[3], double v[3], double w[3]) {
w[0] = (u[1] * v[2]) - (u[2] * v[1]);
w[1] = (u[2] * v[0]) - (u[0] * v[2]);
w[2] = (u[0] * v[1]) - (u[1] * v[0]);
}
double LinAlg::dot(double v[3], double w[3]) {
return (v[0] * w[0]) + (v[1] * w[1]) + (v[2] * w[2]);
}
void LinAlg::linComb(double k1, double u[3], double k2, double v[3], double w[3]) {
for (int i=0; i<3; i++) w[i] = (k1 * u[i]) + (k2 * v[i]);
}
void LinAlg::matMat(double a[3][3], double b[3][3], double c[3][3]) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
c[i][j] = (a[i][0] * b[0][j]) + (a[i][1] * b[1][j]) + (a[i][2] * b[2][j]);
}
}
}
void LinAlg::matVec(double t[3][3], double v[3], double w[3]) {
for (int i=0; i<3; i++) w[i] = (t[i][0] * v[0]) + (t[i][1] * v[1]) + (t[i][2] * v[2]);
}
double LinAlg::norm(double v[3]) {
return sqrt(pow(v[0], 2.) + pow(v[1], 2.) + pow(v[2], 2.));
}
void LinAlg::tranMat(double a[3][3], double b[3][3]) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
b[i][j] = a[j][i];
}
}
}
void LinAlg::unitVec(double u[3], double v[3]) {
double n;
n = norm(u);
if (n != 0.) {
for (int i=0; i<3; i++) v[i] = u[i] / n;
}
}