1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/*
algebra.h: This file contains a number of utilities useful for handling
3D vectors
This work is an adaptation from vvector.h, written by Linas Vepstras. The
original code can be found at:
https://github.com/markkilgard/glut/blob/master/lib/gle/vvector.h
HISTORY:
Written by Linas Vepstas, August 1991
Added 2D code, March 1993
Added Outer products, C++ proofed, Linas Vepstas October 1993
Adapted for altitude estimation tasks by Juan Gallostra June 2018
Separated .h, .cpp by Simon D. Levy July 2018
*/
#pragma once
//#include <cmath>
#include <math.h>
// Copy 3D vector
void copyVector(float b[3],float a[3]);
// Vector difference
void subtractVectors(float v21[3], float v2[3], float v1[3]);
// Vector sum
void sumVectors(float v21[3], float v2[3], float v1[3]);
// scalar times vector
void scaleVector(float c[3],float a, float b[3]);
// accumulate scaled vector
void accumulateScaledVector(float c[3], float a, float b[3]);
// Vector dot product
void dotProductVectors(float * c, float a[3], float b[3]);
// Vector length
void vectorLength(float * len, float a[3]);
// Normalize vector
void normalizeVector(float a[3]);
// 3D Vector cross product yeilding vector
void crossProductVectors(float c[3], float a[3], float b[3]);
// initialize matrix
void identityMatrix3x3(float m[3][3]);
// matrix copy
void copyMatrix3x3(float b[3][3], float a[3][3]);
// matrix transpose
void transposeMatrix3x3(float b[3][3], float a[3][3]);
// multiply matrix by scalar
void scaleMatrix3x3(float b[3][3], float s, float a[3][3]);
// multiply matrix by scalar and add result to another matrix
void scaleAndAccumulateMatrix3x3(float b[3][3], float s, float a[3][3]);
// matrix product
// c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y]
void matrixProduct3x3(float c[3][3], float a[3][3], float b[3][3]);
// matrix times vector
void matrixDotVector3x3(float p[3], float m[3][3], float v[3]);
// determinant of matrix
// Computes determinant of matrix m, returning d
void determinant3x3(float * d, float m[3][3]);
// adjoint of matrix
// Computes adjoint of matrix m, returning a
// (Note that adjoint is just the transpose of the cofactor matrix);
void adjoint3x3(float a[3][3], float m[3][3]);
// compute adjoint of matrix and scale
// Computes adjoint of matrix m, scales it by s, returning a
void scaleAdjoint3x3(float a[3][3], float s, float m[3][3]);
// inverse of matrix
// Compute inverse of matrix a, returning determinant m and
// inverse b
void invert3x3(float b[3][3], float a[3][3]);
// skew matrix from vector
void skew(float a[3][3], float v[3]);
void printMatrix3X3(float mmm[3][3]);
void vecPrint(float a[3]);
|