Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenlib/intern/math_matrix.c')
-rw-r--r--source/blender/blenlib/intern/math_matrix.c918
1 files changed, 457 insertions, 461 deletions
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index f523bd07c09..08c7d3b1e91 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -204,20 +204,20 @@ void copy_m4d_m4(double m1[4][4], const float m2[4][4])
m1[3][3] = m2[3][3];
}
-void copy_m3_m3d(float R[3][3], const double A[3][3])
+void copy_m3_m3d(float m1[3][3], const double m2[3][3])
{
/* Keep it stupid simple for better data flow in CPU. */
- R[0][0] = (float)A[0][0];
- R[0][1] = (float)A[0][1];
- R[0][2] = (float)A[0][2];
+ m1[0][0] = (float)m2[0][0];
+ m1[0][1] = (float)m2[0][1];
+ m1[0][2] = (float)m2[0][2];
- R[1][0] = (float)A[1][0];
- R[1][1] = (float)A[1][1];
- R[1][2] = (float)A[1][2];
+ m1[1][0] = (float)m2[1][0];
+ m1[1][1] = (float)m2[1][1];
+ m1[1][2] = (float)m2[1][2];
- R[2][0] = (float)A[2][0];
- R[2][1] = (float)A[2][1];
- R[2][2] = (float)A[2][2];
+ m1[2][0] = (float)m2[2][0];
+ m1[2][1] = (float)m2[2][1];
+ m1[2][2] = (float)m2[2][2];
}
void swap_m3m3(float m1[3][3], float m2[3][3])
@@ -435,105 +435,105 @@ void mul_m3_m3m3_uniq(float R[3][3], const float A[3][3], const float B[3][3])
R[2][2] = B[2][0] * A[0][2] + B[2][1] * A[1][2] + B[2][2] * A[2][2];
}
-void mul_m4_m4m3(float m1[4][4], const float m3_[4][4], const float m2_[3][3])
+void mul_m4_m4m3(float R[4][4], const float A[4][4], const float B[3][3])
{
- float m2[3][3], m3[4][4];
+ float B_[3][3], A_[4][4];
- /* copy so it works when m1 is the same pointer as m2 or m3 */
+ /* copy so it works when R is the same pointer as A or B */
/* TODO: avoid copying when matrices are different */
- copy_m3_m3(m2, m2_);
- copy_m4_m4(m3, m3_);
+ copy_m4_m4(A_, A);
+ copy_m3_m3(B_, B);
- m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
- m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
- m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
- m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
- m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
- m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
- m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
- m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
- m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
+ R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
+ R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
+ R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
+ R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
+ R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
+ R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
+ R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
+ R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
+ R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
}
-/* m1 = m2 * m3, ignore the elements on the 4th row/column of m2 */
-void mul_m3_m3m4(float m1[3][3], const float m3_[3][3], const float m2_[4][4])
+/* R = A * B, ignore the elements on the 4th row/column of A */
+void mul_m3_m3m4(float R[3][3], const float A[3][3], const float B[4][4])
{
- float m2[4][4], m3[3][3];
+ float B_[4][4], A_[3][3];
- /* copy so it works when m1 is the same pointer as m2 or m3 */
+ /* copy so it works when R is the same pointer as A or B */
/* TODO: avoid copying when matrices are different */
- copy_m4_m4(m2, m2_);
- copy_m3_m3(m3, m3_);
+ copy_m3_m3(A_, A);
+ copy_m4_m4(B_, B);
- /* m1[i][j] = m2[i][k] * m3[k][j] */
- m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
- m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
- m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
+ /* R[i][j] = B_[i][k] * A_[k][j] */
+ R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
+ R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
+ R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
- m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
- m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
- m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
+ R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
+ R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
+ R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
- m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
- m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
- m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
+ R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
+ R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
+ R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
}
-/* m1 = m2 * m3, ignore the elements on the 4th row/column of m3 */
-void mul_m3_m4m3(float m1[3][3], const float m3_[4][4], const float m2_[3][3])
+/* R = A * B, ignore the elements on the 4th row/column of B */
+void mul_m3_m4m3(float R[3][3], const float A[4][4], const float B[3][3])
{
- float m2[3][3], m3[4][4];
+ float B_[3][3], A_[4][4];
- /* copy so it works when m1 is the same pointer as m2 or m3 */
+ /* copy so it works when R is the same pointer as A or B */
/* TODO: avoid copying when matrices are different */
- copy_m3_m3(m2, m2_);
- copy_m4_m4(m3, m3_);
+ copy_m4_m4(A_, A);
+ copy_m3_m3(B_, B);
- /* m1[i][j] = m2[i][k] * m3[k][j] */
- m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
- m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
- m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
+ /* R[i][j] = B[i][k] * A[k][j] */
+ R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
+ R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
+ R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
- m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
- m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
- m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
+ R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
+ R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
+ R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
- m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
- m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
- m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
+ R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
+ R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
+ R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
}
-void mul_m4_m3m4(float m1[4][4], const float m3_[3][3], const float m2_[4][4])
+void mul_m4_m3m4(float R[4][4], const float A[3][3], const float B[4][4])
{
- float m2[4][4], m3[3][3];
+ float B_[4][4], A_[3][3];
- /* copy so it works when m1 is the same pointer as m2 or m3 */
+ /* copy so it works when R is the same pointer as A or B */
/* TODO: avoid copying when matrices are different */
- copy_m4_m4(m2, m2_);
- copy_m3_m3(m3, m3_);
+ copy_m3_m3(A_, A);
+ copy_m4_m4(B_, B);
- m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
- m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
- m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
- m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
- m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
- m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
- m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
- m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
- m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
+ R[0][0] = B_[0][0] * A_[0][0] + B_[0][1] * A_[1][0] + B_[0][2] * A_[2][0];
+ R[0][1] = B_[0][0] * A_[0][1] + B_[0][1] * A_[1][1] + B_[0][2] * A_[2][1];
+ R[0][2] = B_[0][0] * A_[0][2] + B_[0][1] * A_[1][2] + B_[0][2] * A_[2][2];
+ R[1][0] = B_[1][0] * A_[0][0] + B_[1][1] * A_[1][0] + B_[1][2] * A_[2][0];
+ R[1][1] = B_[1][0] * A_[0][1] + B_[1][1] * A_[1][1] + B_[1][2] * A_[2][1];
+ R[1][2] = B_[1][0] * A_[0][2] + B_[1][1] * A_[1][2] + B_[1][2] * A_[2][2];
+ R[2][0] = B_[2][0] * A_[0][0] + B_[2][1] * A_[1][0] + B_[2][2] * A_[2][0];
+ R[2][1] = B_[2][0] * A_[0][1] + B_[2][1] * A_[1][1] + B_[2][2] * A_[2][1];
+ R[2][2] = B_[2][0] * A_[0][2] + B_[2][1] * A_[1][2] + B_[2][2] * A_[2][2];
}
-void mul_m3_m4m4(float m1[3][3], const float m3[4][4], const float m2[4][4])
+void mul_m3_m4m4(float R[3][3], const float A[4][4], const float B[4][4])
{
- m1[0][0] = m2[0][0] * m3[0][0] + m2[0][1] * m3[1][0] + m2[0][2] * m3[2][0];
- m1[0][1] = m2[0][0] * m3[0][1] + m2[0][1] * m3[1][1] + m2[0][2] * m3[2][1];
- m1[0][2] = m2[0][0] * m3[0][2] + m2[0][1] * m3[1][2] + m2[0][2] * m3[2][2];
- m1[1][0] = m2[1][0] * m3[0][0] + m2[1][1] * m3[1][0] + m2[1][2] * m3[2][0];
- m1[1][1] = m2[1][0] * m3[0][1] + m2[1][1] * m3[1][1] + m2[1][2] * m3[2][1];
- m1[1][2] = m2[1][0] * m3[0][2] + m2[1][1] * m3[1][2] + m2[1][2] * m3[2][2];
- m1[2][0] = m2[2][0] * m3[0][0] + m2[2][1] * m3[1][0] + m2[2][2] * m3[2][0];
- m1[2][1] = m2[2][0] * m3[0][1] + m2[2][1] * m3[1][1] + m2[2][2] * m3[2][1];
- m1[2][2] = m2[2][0] * m3[0][2] + m2[2][1] * m3[1][2] + m2[2][2] * m3[2][2];
+ R[0][0] = B[0][0] * A[0][0] + B[0][1] * A[1][0] + B[0][2] * A[2][0];
+ R[0][1] = B[0][0] * A[0][1] + B[0][1] * A[1][1] + B[0][2] * A[2][1];
+ R[0][2] = B[0][0] * A[0][2] + B[0][1] * A[1][2] + B[0][2] * A[2][2];
+ R[1][0] = B[1][0] * A[0][0] + B[1][1] * A[1][0] + B[1][2] * A[2][0];
+ R[1][1] = B[1][0] * A[0][1] + B[1][1] * A[1][1] + B[1][2] * A[2][1];
+ R[1][2] = B[1][0] * A[0][2] + B[1][1] * A[1][2] + B[1][2] * A[2][2];
+ R[2][0] = B[2][0] * A[0][0] + B[2][1] * A[1][0] + B[2][2] * A[2][0];
+ R[2][1] = B[2][0] * A[0][1] + B[2][1] * A[1][1] + B[2][2] * A[2][1];
+ R[2][2] = B[2][0] * A[0][2] + B[2][1] * A[1][2] + B[2][2] * A[2][2];
}
/** \name Macro helpers for: mul_m3_series
@@ -726,14 +726,14 @@ void mul_m3_v2(const float m[3][3], float r[2])
mul_v2_m3v2(r, m, r);
}
-void mul_m4_v3(const float mat[4][4], float vec[3])
+void mul_m4_v3(const float M[4][4], float r[3])
{
- const float x = vec[0];
- const float y = vec[1];
+ const float x = r[0];
+ const float y = r[1];
- vec[0] = x * mat[0][0] + y * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
- vec[1] = x * mat[0][1] + y * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
- vec[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
+ r[0] = x * M[0][0] + y * M[1][0] + M[2][0] * r[2] + M[3][0];
+ r[1] = x * M[0][1] + y * M[1][1] + M[2][1] * r[2] + M[3][1];
+ r[2] = x * M[0][2] + y * M[1][2] + M[2][2] * r[2] + M[3][2];
}
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
@@ -788,14 +788,14 @@ void mul_m2_v2(const float mat[2][2], float vec[2])
}
/** Same as #mul_m4_v3() but doesn't apply translation component. */
-void mul_mat3_m4_v3(const float mat[4][4], float vec[3])
+void mul_mat3_m4_v3(const float M[4][4], float r[3])
{
- const float x = vec[0];
- const float y = vec[1];
+ const float x = r[0];
+ const float y = r[1];
- vec[0] = x * mat[0][0] + y * mat[1][0] + mat[2][0] * vec[2];
- vec[1] = x * mat[0][1] + y * mat[1][1] + mat[2][1] * vec[2];
- vec[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2];
+ r[0] = x * M[0][0] + y * M[1][0] + M[2][0] * r[2];
+ r[1] = x * M[0][1] + y * M[1][1] + M[2][1] * r[2];
+ r[2] = x * M[0][2] + y * M[1][2] + M[2][2] * r[2];
}
void mul_v3_mat3_m4v3(float r[3], const float mat[4][4], const float vec[3])
@@ -934,164 +934,164 @@ void mul_m3_v3_db(const double M[3][3], double r[3])
mul_v3_m3v3_db(r, M, (const double[3]){UNPACK3(r)});
}
-void mul_transposed_m3_v3(const float mat[3][3], float vec[3])
+void mul_transposed_m3_v3(const float M[3][3], float r[3])
{
- const float x = vec[0];
- const float y = vec[1];
+ const float x = r[0];
+ const float y = r[1];
- vec[0] = x * mat[0][0] + y * mat[0][1] + mat[0][2] * vec[2];
- vec[1] = x * mat[1][0] + y * mat[1][1] + mat[1][2] * vec[2];
- vec[2] = x * mat[2][0] + y * mat[2][1] + mat[2][2] * vec[2];
+ r[0] = x * M[0][0] + y * M[0][1] + M[0][2] * r[2];
+ r[1] = x * M[1][0] + y * M[1][1] + M[1][2] * r[2];
+ r[2] = x * M[2][0] + y * M[2][1] + M[2][2] * r[2];
}
-void mul_transposed_mat3_m4_v3(const float mat[4][4], float vec[3])
+void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3])
{
- const float x = vec[0];
- const float y = vec[1];
+ const float x = r[0];
+ const float y = r[1];
- vec[0] = x * mat[0][0] + y * mat[0][1] + mat[0][2] * vec[2];
- vec[1] = x * mat[1][0] + y * mat[1][1] + mat[1][2] * vec[2];
- vec[2] = x * mat[2][0] + y * mat[2][1] + mat[2][2] * vec[2];
+ r[0] = x * M[0][0] + y * M[0][1] + M[0][2] * r[2];
+ r[1] = x * M[1][0] + y * M[1][1] + M[1][2] * r[2];
+ r[2] = x * M[2][0] + y * M[2][1] + M[2][2] * r[2];
}
-void mul_m3_fl(float m[3][3], float f)
+void mul_m3_fl(float R[3][3], float f)
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
- m[i][j] *= f;
+ R[i][j] *= f;
}
}
}
-void mul_m4_fl(float m[4][4], float f)
+void mul_m4_fl(float R[4][4], float f)
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
- m[i][j] *= f;
+ R[i][j] *= f;
}
}
}
-void mul_mat3_m4_fl(float m[4][4], float f)
+void mul_mat3_m4_fl(float R[4][4], float f)
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
- m[i][j] *= f;
+ R[i][j] *= f;
}
}
}
-void negate_m3(float m[3][3])
+void negate_m3(float R[3][3])
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
- m[i][j] *= -1.0f;
+ R[i][j] *= -1.0f;
}
}
}
-void negate_mat3_m4(float m[4][4])
+void negate_mat3_m4(float R[4][4])
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
- m[i][j] *= -1.0f;
+ R[i][j] *= -1.0f;
}
}
}
-void negate_m4(float m[4][4])
+void negate_m4(float R[4][4])
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
- m[i][j] *= -1.0f;
+ R[i][j] *= -1.0f;
}
}
}
-void mul_m3_v3_double(const float mat[3][3], double vec[3])
+void mul_m3_v3_double(const float M[3][3], double r[3])
{
- const double x = vec[0];
- const double y = vec[1];
+ const double x = r[0];
+ const double y = r[1];
- vec[0] = x * (double)mat[0][0] + y * (double)mat[1][0] + (double)mat[2][0] * vec[2];
- vec[1] = x * (double)mat[0][1] + y * (double)mat[1][1] + (double)mat[2][1] * vec[2];
- vec[2] = x * (double)mat[0][2] + y * (double)mat[1][2] + (double)mat[2][2] * vec[2];
+ r[0] = x * (double)M[0][0] + y * (double)M[1][0] + (double)M[2][0] * r[2];
+ r[1] = x * (double)M[0][1] + y * (double)M[1][1] + (double)M[2][1] * r[2];
+ r[2] = x * (double)M[0][2] + y * (double)M[1][2] + (double)M[2][2] * r[2];
}
-void add_m3_m3m3(float m1[3][3], const float m2[3][3], const float m3[3][3])
+void add_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
- m1[i][j] = m2[i][j] + m3[i][j];
+ R[i][j] = A[i][j] + B[i][j];
}
}
}
-void add_m4_m4m4(float m1[4][4], const float m2[4][4], const float m3[4][4])
+void add_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
- m1[i][j] = m2[i][j] + m3[i][j];
+ R[i][j] = A[i][j] + B[i][j];
}
}
}
-void madd_m3_m3m3fl(float m1[3][3], const float m2[3][3], const float m3[3][3], const float f)
+void madd_m3_m3m3fl(float R[3][3], const float A[3][3], const float B[3][3], const float f)
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
- m1[i][j] = m2[i][j] + m3[i][j] * f;
+ R[i][j] = A[i][j] + B[i][j] * f;
}
}
}
-void madd_m4_m4m4fl(float m1[4][4], const float m2[4][4], const float m3[4][4], const float f)
+void madd_m4_m4m4fl(float R[4][4], const float A[4][4], const float B[4][4], const float f)
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
- m1[i][j] = m2[i][j] + m3[i][j] * f;
+ R[i][j] = A[i][j] + B[i][j] * f;
}
}
}
-void sub_m3_m3m3(float m1[3][3], const float m2[3][3], const float m3[3][3])
+void sub_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
{
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
- m1[i][j] = m2[i][j] - m3[i][j];
+ R[i][j] = A[i][j] - B[i][j];
}
}
}
-void sub_m4_m4m4(float m1[4][4], const float m2[4][4], const float m3[4][4])
+void sub_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
- m1[i][j] = m2[i][j] - m3[i][j];
+ R[i][j] = A[i][j] - B[i][j];
}
}
}
@@ -1306,113 +1306,112 @@ void mul_m4_m4m4_aligned_scale(float R[4][4], const float A[4][4], const float B
/****************************** Linear Algebra *******************************/
-void transpose_m3(float mat[3][3])
+void transpose_m3(float R[3][3])
{
float t;
- t = mat[0][1];
- mat[0][1] = mat[1][0];
- mat[1][0] = t;
- t = mat[0][2];
- mat[0][2] = mat[2][0];
- mat[2][0] = t;
- t = mat[1][2];
- mat[1][2] = mat[2][1];
- mat[2][1] = t;
+ t = R[0][1];
+ R[0][1] = R[1][0];
+ R[1][0] = t;
+ t = R[0][2];
+ R[0][2] = R[2][0];
+ R[2][0] = t;
+ t = R[1][2];
+ R[1][2] = R[2][1];
+ R[2][1] = t;
}
-void transpose_m3_m3(float rmat[3][3], const float mat[3][3])
+void transpose_m3_m3(float R[3][3], const float M[3][3])
{
- BLI_assert(rmat != mat);
+ BLI_assert(R != M);
- rmat[0][0] = mat[0][0];
- rmat[0][1] = mat[1][0];
- rmat[0][2] = mat[2][0];
- rmat[1][0] = mat[0][1];
- rmat[1][1] = mat[1][1];
- rmat[1][2] = mat[2][1];
- rmat[2][0] = mat[0][2];
- rmat[2][1] = mat[1][2];
- rmat[2][2] = mat[2][2];
+ R[0][0] = M[0][0];
+ R[0][1] = M[1][0];
+ R[0][2] = M[2][0];
+ R[1][0] = M[0][1];
+ R[1][1] = M[1][1];
+ R[1][2] = M[2][1];
+ R[2][0] = M[0][2];
+ R[2][1] = M[1][2];
+ R[2][2] = M[2][2];
}
/* seems obscure but in-fact a common operation */
-void transpose_m3_m4(float rmat[3][3], const float mat[4][4])
+void transpose_m3_m4(float R[3][3], const float M[4][4])
{
- BLI_assert(&rmat[0][0] != &mat[0][0]);
+ BLI_assert(&R[0][0] != &M[0][0]);
- rmat[0][0] = mat[0][0];
- rmat[0][1] = mat[1][0];
- rmat[0][2] = mat[2][0];
- rmat[1][0] = mat[0][1];
- rmat[1][1] = mat[1][1];
- rmat[1][2] = mat[2][1];
- rmat[2][0] = mat[0][2];
- rmat[2][1] = mat[1][2];
- rmat[2][2] = mat[2][2];
+ R[0][0] = M[0][0];
+ R[0][1] = M[1][0];
+ R[0][2] = M[2][0];
+ R[1][0] = M[0][1];
+ R[1][1] = M[1][1];
+ R[1][2] = M[2][1];
+ R[2][0] = M[0][2];
+ R[2][1] = M[1][2];
+ R[2][2] = M[2][2];
}
-void transpose_m4(float mat[4][4])
+void transpose_m4(float R[4][4])
{
float t;
- t = mat[0][1];
- mat[0][1] = mat[1][0];
- mat[1][0] = t;
- t = mat[0][2];
- mat[0][2] = mat[2][0];
- mat[2][0] = t;
- t = mat[0][3];
- mat[0][3] = mat[3][0];
- mat[3][0] = t;
-
- t = mat[1][2];
- mat[1][2] = mat[2][1];
- mat[2][1] = t;
- t = mat[1][3];
- mat[1][3] = mat[3][1];
- mat[3][1] = t;
-
- t = mat[2][3];
- mat[2][3] = mat[3][2];
- mat[3][2] = t;
-}
-
-void transpose_m4_m4(float rmat[4][4], const float mat[4][4])
-{
- BLI_assert(rmat != mat);
-
- rmat[0][0] = mat[0][0];
- rmat[0][1] = mat[1][0];
- rmat[0][2] = mat[2][0];
- rmat[0][3] = mat[3][0];
- rmat[1][0] = mat[0][1];
- rmat[1][1] = mat[1][1];
- rmat[1][2] = mat[2][1];
- rmat[1][3] = mat[3][1];
- rmat[2][0] = mat[0][2];
- rmat[2][1] = mat[1][2];
- rmat[2][2] = mat[2][2];
- rmat[2][3] = mat[3][2];
- rmat[3][0] = mat[0][3];
- rmat[3][1] = mat[1][3];
- rmat[3][2] = mat[2][3];
- rmat[3][3] = mat[3][3];
-}
-
-/* TODO: return bool */
-int compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit)
+ t = R[0][1];
+ R[0][1] = R[1][0];
+ R[1][0] = t;
+ t = R[0][2];
+ R[0][2] = R[2][0];
+ R[2][0] = t;
+ t = R[0][3];
+ R[0][3] = R[3][0];
+ R[3][0] = t;
+
+ t = R[1][2];
+ R[1][2] = R[2][1];
+ R[2][1] = t;
+ t = R[1][3];
+ R[1][3] = R[3][1];
+ R[3][1] = t;
+
+ t = R[2][3];
+ R[2][3] = R[3][2];
+ R[3][2] = t;
+}
+
+void transpose_m4_m4(float R[4][4], const float M[4][4])
+{
+ BLI_assert(R != M);
+
+ R[0][0] = M[0][0];
+ R[0][1] = M[1][0];
+ R[0][2] = M[2][0];
+ R[0][3] = M[3][0];
+ R[1][0] = M[0][1];
+ R[1][1] = M[1][1];
+ R[1][2] = M[2][1];
+ R[1][3] = M[3][1];
+ R[2][0] = M[0][2];
+ R[2][1] = M[1][2];
+ R[2][2] = M[2][2];
+ R[2][3] = M[3][2];
+ R[3][0] = M[0][3];
+ R[3][1] = M[1][3];
+ R[3][2] = M[2][3];
+ R[3][3] = M[3][3];
+}
+
+bool compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit)
{
if (compare_v4v4(mat1[0], mat2[0], limit)) {
if (compare_v4v4(mat1[1], mat2[1], limit)) {
if (compare_v4v4(mat1[2], mat2[2], limit)) {
if (compare_v4v4(mat1[3], mat2[3], limit)) {
- return 1;
+ return true;
}
}
}
}
- return 0;
+ return false;
}
/**
@@ -1420,88 +1419,88 @@ int compare_m4m4(const float mat1[4][4], const float mat2[4][4], float limit)
*
* \param axis: Axis to build the orthonormal basis around.
*/
-void orthogonalize_m3(float mat[3][3], int axis)
+void orthogonalize_m3(float R[3][3], int axis)
{
float size[3];
- mat3_to_size(size, mat);
- normalize_v3(mat[axis]);
+ mat3_to_size(size, R);
+ normalize_v3(R[axis]);
switch (axis) {
case 0:
- if (dot_v3v3(mat[0], mat[1]) < 1) {
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
- normalize_v3(mat[2]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ if (dot_v3v3(R[0], R[1]) < 1) {
+ cross_v3_v3v3(R[2], R[0], R[1]);
+ normalize_v3(R[2]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
- else if (dot_v3v3(mat[0], mat[2]) < 1) {
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
- normalize_v3(mat[1]);
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
+ else if (dot_v3v3(R[0], R[2]) < 1) {
+ cross_v3_v3v3(R[1], R[2], R[0]);
+ normalize_v3(R[1]);
+ cross_v3_v3v3(R[2], R[0], R[1]);
}
else {
float vec[3];
- vec[0] = mat[0][1];
- vec[1] = mat[0][2];
- vec[2] = mat[0][0];
+ vec[0] = R[0][1];
+ vec[1] = R[0][2];
+ vec[2] = R[0][0];
- cross_v3_v3v3(mat[2], mat[0], vec);
- normalize_v3(mat[2]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ cross_v3_v3v3(R[2], R[0], vec);
+ normalize_v3(R[2]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
break;
case 1:
- if (dot_v3v3(mat[1], mat[0]) < 1) {
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
- normalize_v3(mat[2]);
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
+ if (dot_v3v3(R[1], R[0]) < 1) {
+ cross_v3_v3v3(R[2], R[0], R[1]);
+ normalize_v3(R[2]);
+ cross_v3_v3v3(R[0], R[1], R[2]);
}
- else if (dot_v3v3(mat[0], mat[2]) < 1) {
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
+ else if (dot_v3v3(R[0], R[2]) < 1) {
+ cross_v3_v3v3(R[0], R[1], R[2]);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[2], R[0], R[1]);
}
else {
float vec[3];
- vec[0] = mat[1][1];
- vec[1] = mat[1][2];
- vec[2] = mat[1][0];
+ vec[0] = R[1][1];
+ vec[1] = R[1][2];
+ vec[2] = R[1][0];
- cross_v3_v3v3(mat[0], mat[1], vec);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
+ cross_v3_v3v3(R[0], R[1], vec);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[2], R[0], R[1]);
}
break;
case 2:
- if (dot_v3v3(mat[2], mat[0]) < 1) {
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
- normalize_v3(mat[1]);
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
+ if (dot_v3v3(R[2], R[0]) < 1) {
+ cross_v3_v3v3(R[1], R[2], R[0]);
+ normalize_v3(R[1]);
+ cross_v3_v3v3(R[0], R[1], R[2]);
}
- else if (dot_v3v3(mat[2], mat[1]) < 1) {
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ else if (dot_v3v3(R[2], R[1]) < 1) {
+ cross_v3_v3v3(R[0], R[1], R[2]);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
else {
float vec[3];
- vec[0] = mat[2][1];
- vec[1] = mat[2][2];
- vec[2] = mat[2][0];
+ vec[0] = R[2][1];
+ vec[1] = R[2][2];
+ vec[2] = R[2][0];
- cross_v3_v3v3(mat[0], vec, mat[2]);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ cross_v3_v3v3(R[0], vec, R[2]);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
break;
default:
BLI_assert(0);
break;
}
- mul_v3_fl(mat[0], size[0]);
- mul_v3_fl(mat[1], size[1]);
- mul_v3_fl(mat[2], size[2]);
+ mul_v3_fl(R[0], size[0]);
+ mul_v3_fl(R[1], size[1]);
+ mul_v3_fl(R[2], size[2]);
}
/**
@@ -1509,88 +1508,88 @@ void orthogonalize_m3(float mat[3][3], int axis)
*
* \param axis: Axis to build the orthonormal basis around.
*/
-void orthogonalize_m4(float mat[4][4], int axis)
+void orthogonalize_m4(float R[4][4], int axis)
{
float size[3];
- mat4_to_size(size, mat);
- normalize_v3(mat[axis]);
+ mat4_to_size(size, R);
+ normalize_v3(R[axis]);
switch (axis) {
case 0:
- if (dot_v3v3(mat[0], mat[1]) < 1) {
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
- normalize_v3(mat[2]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ if (dot_v3v3(R[0], R[1]) < 1) {
+ cross_v3_v3v3(R[2], R[0], R[1]);
+ normalize_v3(R[2]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
- else if (dot_v3v3(mat[0], mat[2]) < 1) {
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
- normalize_v3(mat[1]);
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
+ else if (dot_v3v3(R[0], R[2]) < 1) {
+ cross_v3_v3v3(R[1], R[2], R[0]);
+ normalize_v3(R[1]);
+ cross_v3_v3v3(R[2], R[0], R[1]);
}
else {
float vec[3];
- vec[0] = mat[0][1];
- vec[1] = mat[0][2];
- vec[2] = mat[0][0];
+ vec[0] = R[0][1];
+ vec[1] = R[0][2];
+ vec[2] = R[0][0];
- cross_v3_v3v3(mat[2], mat[0], vec);
- normalize_v3(mat[2]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ cross_v3_v3v3(R[2], R[0], vec);
+ normalize_v3(R[2]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
break;
case 1:
- if (dot_v3v3(mat[1], mat[0]) < 1) {
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
- normalize_v3(mat[2]);
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
+ if (dot_v3v3(R[1], R[0]) < 1) {
+ cross_v3_v3v3(R[2], R[0], R[1]);
+ normalize_v3(R[2]);
+ cross_v3_v3v3(R[0], R[1], R[2]);
}
- else if (dot_v3v3(mat[0], mat[2]) < 1) {
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
+ else if (dot_v3v3(R[0], R[2]) < 1) {
+ cross_v3_v3v3(R[0], R[1], R[2]);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[2], R[0], R[1]);
}
else {
float vec[3];
- vec[0] = mat[1][1];
- vec[1] = mat[1][2];
- vec[2] = mat[1][0];
+ vec[0] = R[1][1];
+ vec[1] = R[1][2];
+ vec[2] = R[1][0];
- cross_v3_v3v3(mat[0], mat[1], vec);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[2], mat[0], mat[1]);
+ cross_v3_v3v3(R[0], R[1], vec);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[2], R[0], R[1]);
}
break;
case 2:
- if (dot_v3v3(mat[2], mat[0]) < 1) {
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
- normalize_v3(mat[1]);
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
+ if (dot_v3v3(R[2], R[0]) < 1) {
+ cross_v3_v3v3(R[1], R[2], R[0]);
+ normalize_v3(R[1]);
+ cross_v3_v3v3(R[0], R[1], R[2]);
}
- else if (dot_v3v3(mat[2], mat[1]) < 1) {
- cross_v3_v3v3(mat[0], mat[1], mat[2]);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ else if (dot_v3v3(R[2], R[1]) < 1) {
+ cross_v3_v3v3(R[0], R[1], R[2]);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
else {
float vec[3];
- vec[0] = mat[2][1];
- vec[1] = mat[2][2];
- vec[2] = mat[2][0];
+ vec[0] = R[2][1];
+ vec[1] = R[2][2];
+ vec[2] = R[2][0];
- cross_v3_v3v3(mat[0], vec, mat[2]);
- normalize_v3(mat[0]);
- cross_v3_v3v3(mat[1], mat[2], mat[0]);
+ cross_v3_v3v3(R[0], vec, R[2]);
+ normalize_v3(R[0]);
+ cross_v3_v3v3(R[1], R[2], R[0]);
}
break;
default:
BLI_assert(0);
break;
}
- mul_v3_fl(mat[0], size[0]);
- mul_v3_fl(mat[1], size[1]);
- mul_v3_fl(mat[2], size[2]);
+ mul_v3_fl(R[0], size[0]);
+ mul_v3_fl(R[1], size[1]);
+ mul_v3_fl(R[2], size[2]);
}
/** Make an orthonormal basis around v1 in a way that is stable and symmetric. */
@@ -1793,84 +1792,84 @@ bool is_uniform_scaled_m4(const float m[4][4])
return is_uniform_scaled_m3(t);
}
-void normalize_m2_ex(float mat[2][2], float r_scale[2])
+void normalize_m2_ex(float R[2][2], float r_scale[2])
{
int i;
for (i = 0; i < 2; i++) {
- r_scale[i] = normalize_v2(mat[i]);
+ r_scale[i] = normalize_v2(R[i]);
}
}
-void normalize_m2(float mat[2][2])
+void normalize_m2(float R[2][2])
{
int i;
for (i = 0; i < 2; i++) {
- normalize_v2(mat[i]);
+ normalize_v2(R[i]);
}
}
-void normalize_m2_m2_ex(float rmat[2][2], const float mat[2][2], float r_scale[2])
+void normalize_m2_m2_ex(float R[2][2], const float M[2][2], float r_scale[2])
{
int i;
for (i = 0; i < 2; i++) {
- r_scale[i] = normalize_v2_v2(rmat[i], mat[i]);
+ r_scale[i] = normalize_v2_v2(R[i], M[i]);
}
}
-void normalize_m2_m2(float rmat[2][2], const float mat[2][2])
+void normalize_m2_m2(float R[2][2], const float M[2][2])
{
int i;
for (i = 0; i < 2; i++) {
- normalize_v2_v2(rmat[i], mat[i]);
+ normalize_v2_v2(R[i], M[i]);
}
}
-void normalize_m3_ex(float mat[3][3], float r_scale[3])
+void normalize_m3_ex(float R[3][3], float r_scale[3])
{
int i;
for (i = 0; i < 3; i++) {
- r_scale[i] = normalize_v3(mat[i]);
+ r_scale[i] = normalize_v3(R[i]);
}
}
-void normalize_m3(float mat[3][3])
+void normalize_m3(float R[3][3])
{
int i;
for (i = 0; i < 3; i++) {
- normalize_v3(mat[i]);
+ normalize_v3(R[i]);
}
}
-void normalize_m3_m3_ex(float rmat[3][3], const float mat[3][3], float r_scale[3])
+void normalize_m3_m3_ex(float R[3][3], const float M[3][3], float r_scale[3])
{
int i;
for (i = 0; i < 3; i++) {
- r_scale[i] = normalize_v3_v3(rmat[i], mat[i]);
+ r_scale[i] = normalize_v3_v3(R[i], M[i]);
}
}
-void normalize_m3_m3(float rmat[3][3], const float mat[3][3])
+void normalize_m3_m3(float R[3][3], const float M[3][3])
{
int i;
for (i = 0; i < 3; i++) {
- normalize_v3_v3(rmat[i], mat[i]);
+ normalize_v3_v3(R[i], M[i]);
}
}
-void normalize_m4_ex(float mat[4][4], float r_scale[3])
+void normalize_m4_ex(float R[4][4], float r_scale[3])
{
int i;
for (i = 0; i < 3; i++) {
- r_scale[i] = normalize_v3(mat[i]);
+ r_scale[i] = normalize_v3(R[i]);
if (r_scale[i] != 0.0f) {
- mat[i][3] /= r_scale[i];
+ R[i][3] /= r_scale[i];
}
}
}
-void normalize_m4(float mat[4][4])
+void normalize_m4(float R[4][4])
{
int i;
for (i = 0; i < 3; i++) {
- float len = normalize_v3(mat[i]);
+ float len = normalize_v3(R[i]);
if (len != 0.0f) {
- mat[i][3] /= len;
+ R[i][3] /= len;
}
}
}
@@ -1894,75 +1893,75 @@ void normalize_m4_m4(float rmat[4][4], const float mat[4][4])
copy_v4_v4(rmat[3], mat[3]);
}
-void adjoint_m2_m2(float m1[2][2], const float m[2][2])
+void adjoint_m2_m2(float R[2][2], const float M[2][2])
{
- BLI_assert(m1 != m);
- m1[0][0] = m[1][1];
- m1[0][1] = -m[0][1];
- m1[1][0] = -m[1][0];
- m1[1][1] = m[0][0];
+ BLI_assert(R != M);
+ R[0][0] = M[1][1];
+ R[0][1] = -M[0][1];
+ R[1][0] = -M[1][0];
+ R[1][1] = M[0][0];
}
-void adjoint_m3_m3(float m1[3][3], const float m[3][3])
+void adjoint_m3_m3(float R[3][3], const float M[3][3])
{
- BLI_assert(m1 != m);
- m1[0][0] = m[1][1] * m[2][2] - m[1][2] * m[2][1];
- m1[0][1] = -m[0][1] * m[2][2] + m[0][2] * m[2][1];
- m1[0][2] = m[0][1] * m[1][2] - m[0][2] * m[1][1];
+ BLI_assert(R != M);
+ R[0][0] = M[1][1] * M[2][2] - M[1][2] * M[2][1];
+ R[0][1] = -M[0][1] * M[2][2] + M[0][2] * M[2][1];
+ R[0][2] = M[0][1] * M[1][2] - M[0][2] * M[1][1];
- m1[1][0] = -m[1][0] * m[2][2] + m[1][2] * m[2][0];
- m1[1][1] = m[0][0] * m[2][2] - m[0][2] * m[2][0];
- m1[1][2] = -m[0][0] * m[1][2] + m[0][2] * m[1][0];
+ R[1][0] = -M[1][0] * M[2][2] + M[1][2] * M[2][0];
+ R[1][1] = M[0][0] * M[2][2] - M[0][2] * M[2][0];
+ R[1][2] = -M[0][0] * M[1][2] + M[0][2] * M[1][0];
- m1[2][0] = m[1][0] * m[2][1] - m[1][1] * m[2][0];
- m1[2][1] = -m[0][0] * m[2][1] + m[0][1] * m[2][0];
- m1[2][2] = m[0][0] * m[1][1] - m[0][1] * m[1][0];
+ R[2][0] = M[1][0] * M[2][1] - M[1][1] * M[2][0];
+ R[2][1] = -M[0][0] * M[2][1] + M[0][1] * M[2][0];
+ R[2][2] = M[0][0] * M[1][1] - M[0][1] * M[1][0];
}
-void adjoint_m4_m4(float out[4][4], const float in[4][4]) /* out = ADJ(in) */
+void adjoint_m4_m4(float R[4][4], const float M[4][4]) /* out = ADJ(in) */
{
float a1, a2, a3, a4, b1, b2, b3, b4;
float c1, c2, c3, c4, d1, d2, d3, d4;
- a1 = in[0][0];
- b1 = in[0][1];
- c1 = in[0][2];
- d1 = in[0][3];
+ a1 = M[0][0];
+ b1 = M[0][1];
+ c1 = M[0][2];
+ d1 = M[0][3];
- a2 = in[1][0];
- b2 = in[1][1];
- c2 = in[1][2];
- d2 = in[1][3];
+ a2 = M[1][0];
+ b2 = M[1][1];
+ c2 = M[1][2];
+ d2 = M[1][3];
- a3 = in[2][0];
- b3 = in[2][1];
- c3 = in[2][2];
- d3 = in[2][3];
+ a3 = M[2][0];
+ b3 = M[2][1];
+ c3 = M[2][2];
+ d3 = M[2][3];
- a4 = in[3][0];
- b4 = in[3][1];
- c4 = in[3][2];
- d4 = in[3][3];
+ a4 = M[3][0];
+ b4 = M[3][1];
+ c4 = M[3][2];
+ d4 = M[3][3];
- out[0][0] = determinant_m3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
- out[1][0] = -determinant_m3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
- out[2][0] = determinant_m3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
- out[3][0] = -determinant_m3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+ R[0][0] = determinant_m3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
+ R[1][0] = -determinant_m3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
+ R[2][0] = determinant_m3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
+ R[3][0] = -determinant_m3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
- out[0][1] = -determinant_m3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
- out[1][1] = determinant_m3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
- out[2][1] = -determinant_m3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
- out[3][1] = determinant_m3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
+ R[0][1] = -determinant_m3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
+ R[1][1] = determinant_m3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
+ R[2][1] = -determinant_m3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
+ R[3][1] = determinant_m3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
- out[0][2] = determinant_m3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
- out[1][2] = -determinant_m3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
- out[2][2] = determinant_m3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
- out[3][2] = -determinant_m3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
+ R[0][2] = determinant_m3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
+ R[1][2] = -determinant_m3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
+ R[2][2] = determinant_m3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
+ R[3][2] = -determinant_m3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
- out[0][3] = -determinant_m3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
- out[1][3] = determinant_m3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
- out[2][3] = -determinant_m3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
- out[3][3] = determinant_m3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
+ R[0][3] = -determinant_m3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
+ R[1][3] = determinant_m3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
+ R[2][3] = -determinant_m3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
+ R[3][3] = determinant_m3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
}
float determinant_m2(float a, float b, float c, float d)
@@ -2017,65 +2016,65 @@ float determinant_m4(const float m[4][4])
/****************************** Transformations ******************************/
-void size_to_mat3(float mat[3][3], const float size[3])
+void size_to_mat3(float R[3][3], const float size[3])
{
- mat[0][0] = size[0];
- mat[0][1] = 0.0f;
- mat[0][2] = 0.0f;
- mat[1][1] = size[1];
- mat[1][0] = 0.0f;
- mat[1][2] = 0.0f;
- mat[2][2] = size[2];
- mat[2][1] = 0.0f;
- mat[2][0] = 0.0f;
+ R[0][0] = size[0];
+ R[0][1] = 0.0f;
+ R[0][2] = 0.0f;
+ R[1][1] = size[1];
+ R[1][0] = 0.0f;
+ R[1][2] = 0.0f;
+ R[2][2] = size[2];
+ R[2][1] = 0.0f;
+ R[2][0] = 0.0f;
}
-void size_to_mat4(float mat[4][4], const float size[3])
+void size_to_mat4(float R[4][4], const float size[3])
{
- mat[0][0] = size[0];
- mat[0][1] = 0.0f;
- mat[0][2] = 0.0f;
- mat[0][3] = 0.0f;
- mat[1][0] = 0.0f;
- mat[1][1] = size[1];
- mat[1][2] = 0.0f;
- mat[1][3] = 0.0f;
- mat[2][0] = 0.0f;
- mat[2][1] = 0.0f;
- mat[2][2] = size[2];
- mat[2][3] = 0.0f;
- mat[3][0] = 0.0f;
- mat[3][1] = 0.0f;
- mat[3][2] = 0.0f;
- mat[3][3] = 1.0f;
+ R[0][0] = size[0];
+ R[0][1] = 0.0f;
+ R[0][2] = 0.0f;
+ R[0][3] = 0.0f;
+ R[1][0] = 0.0f;
+ R[1][1] = size[1];
+ R[1][2] = 0.0f;
+ R[1][3] = 0.0f;
+ R[2][0] = 0.0f;
+ R[2][1] = 0.0f;
+ R[2][2] = size[2];
+ R[2][3] = 0.0f;
+ R[3][0] = 0.0f;
+ R[3][1] = 0.0f;
+ R[3][2] = 0.0f;
+ R[3][3] = 1.0f;
}
-void mat3_to_size(float size[3], const float mat[3][3])
+void mat3_to_size(float size[3], const float M[3][3])
{
- size[0] = len_v3(mat[0]);
- size[1] = len_v3(mat[1]);
- size[2] = len_v3(mat[2]);
+ size[0] = len_v3(M[0]);
+ size[1] = len_v3(M[1]);
+ size[2] = len_v3(M[2]);
}
-void mat4_to_size(float size[3], const float mat[4][4])
+void mat4_to_size(float size[3], const float M[4][4])
{
- size[0] = len_v3(mat[0]);
- size[1] = len_v3(mat[1]);
- size[2] = len_v3(mat[2]);
+ size[0] = len_v3(M[0]);
+ size[1] = len_v3(M[1]);
+ size[2] = len_v3(M[2]);
}
/**
* Extract scale factors from the matrix, with correction to ensure
* exact volume in case of a sheared matrix.
*/
-void mat4_to_size_fix_shear(float size[3], const float mat[4][4])
+void mat4_to_size_fix_shear(float size[3], const float M[4][4])
{
- mat4_to_size(size, mat);
+ mat4_to_size(size, M);
float volume = size[0] * size[1] * size[2];
if (volume != 0.0f) {
- mul_v3_fl(size, cbrtf(fabsf(mat4_to_volume_scale(mat) / volume)));
+ mul_v3_fl(size, cbrtf(fabsf(mat4_to_volume_scale(M) / volume)));
}
}
@@ -2203,22 +2202,22 @@ void mat3_polar_decompose(const float mat3[3][3], float r_U[3][3], float r_P[3][
}
#endif
-void scale_m3_fl(float m[3][3], float scale)
+void scale_m3_fl(float R[3][3], float scale)
{
- m[0][0] = m[1][1] = m[2][2] = scale;
- m[0][1] = m[0][2] = 0.0;
- m[1][0] = m[1][2] = 0.0;
- m[2][0] = m[2][1] = 0.0;
+ R[0][0] = R[1][1] = R[2][2] = scale;
+ R[0][1] = R[0][2] = 0.0;
+ R[1][0] = R[1][2] = 0.0;
+ R[2][0] = R[2][1] = 0.0;
}
-void scale_m4_fl(float m[4][4], float scale)
+void scale_m4_fl(float R[4][4], float scale)
{
- m[0][0] = m[1][1] = m[2][2] = scale;
- m[3][3] = 1.0;
- m[0][1] = m[0][2] = m[0][3] = 0.0;
- m[1][0] = m[1][2] = m[1][3] = 0.0;
- m[2][0] = m[2][1] = m[2][3] = 0.0;
- m[3][0] = m[3][1] = m[3][2] = 0.0;
+ R[0][0] = R[1][1] = R[2][2] = scale;
+ R[3][3] = 1.0;
+ R[0][1] = R[0][2] = R[0][3] = 0.0;
+ R[1][0] = R[1][2] = R[1][3] = 0.0;
+ R[2][0] = R[2][1] = R[2][3] = 0.0;
+ R[3][0] = R[3][1] = R[3][2] = 0.0;
}
void translate_m4(float mat[4][4], float Tx, float Ty, float Tz)
@@ -2486,14 +2485,14 @@ bool equals_m4m4(const float mat1[4][4], const float mat2[4][4])
* Make a 4x4 matrix out of 3 transform components.
* Matrices are made in the order: `scale * rot * loc`
*/
-void loc_rot_size_to_mat4(float mat[4][4],
+void loc_rot_size_to_mat4(float R[4][4],
const float loc[3],
const float rot[3][3],
const float size[3])
{
- copy_m4_m3(mat, rot);
- rescale_m4(mat, size);
- copy_v3_v3(mat[3], loc);
+ copy_m4_m3(R, rot);
+ rescale_m4(R, size);
+ copy_v3_v3(R[3], loc);
}
/**
@@ -2502,7 +2501,7 @@ void loc_rot_size_to_mat4(float mat[4][4],
*
* TODO: need to have a version that allows for rotation order...
*/
-void loc_eul_size_to_mat4(float mat[4][4],
+void loc_eul_size_to_mat4(float R[4][4],
const float loc[3],
const float eul[3],
const float size[3])
@@ -2510,7 +2509,7 @@ void loc_eul_size_to_mat4(float mat[4][4],
float rmat[3][3], smat[3][3], tmat[3][3];
/* initialize new matrix */
- unit_m4(mat);
+ unit_m4(R);
/* make rotation + scaling part */
eul_to_mat3(rmat, eul);
@@ -2518,19 +2517,19 @@ void loc_eul_size_to_mat4(float mat[4][4],
mul_m3_m3m3(tmat, rmat, smat);
/* copy rot/scale part to output matrix*/
- copy_m4_m3(mat, tmat);
+ copy_m4_m3(R, tmat);
/* copy location to matrix */
- mat[3][0] = loc[0];
- mat[3][1] = loc[1];
- mat[3][2] = loc[2];
+ R[3][0] = loc[0];
+ R[3][1] = loc[1];
+ R[3][2] = loc[2];
}
/**
* Make a 4x4 matrix out of 3 transform components.
* Matrices are made in the order: `scale * rot * loc`
*/
-void loc_eulO_size_to_mat4(float mat[4][4],
+void loc_eulO_size_to_mat4(float R[4][4],
const float loc[3],
const float eul[3],
const float size[3],
@@ -2539,7 +2538,7 @@ void loc_eulO_size_to_mat4(float mat[4][4],
float rmat[3][3], smat[3][3], tmat[3][3];
/* initialize new matrix */
- unit_m4(mat);
+ unit_m4(R);
/* make rotation + scaling part */
eulO_to_mat3(rmat, eul, rotOrder);
@@ -2547,19 +2546,19 @@ void loc_eulO_size_to_mat4(float mat[4][4],
mul_m3_m3m3(tmat, rmat, smat);
/* copy rot/scale part to output matrix*/
- copy_m4_m3(mat, tmat);
+ copy_m4_m3(R, tmat);
/* copy location to matrix */
- mat[3][0] = loc[0];
- mat[3][1] = loc[1];
- mat[3][2] = loc[2];
+ R[3][0] = loc[0];
+ R[3][1] = loc[1];
+ R[3][2] = loc[2];
}
/**
* Make a 4x4 matrix out of 3 transform components.
* Matrices are made in the order: `scale * rot * loc`
*/
-void loc_quat_size_to_mat4(float mat[4][4],
+void loc_quat_size_to_mat4(float R[4][4],
const float loc[3],
const float quat[4],
const float size[3])
@@ -2567,7 +2566,7 @@ void loc_quat_size_to_mat4(float mat[4][4],
float rmat[3][3], smat[3][3], tmat[3][3];
/* initialize new matrix */
- unit_m4(mat);
+ unit_m4(R);
/* make rotation + scaling part */
quat_to_mat3(rmat, quat);
@@ -2575,23 +2574,20 @@ void loc_quat_size_to_mat4(float mat[4][4],
mul_m3_m3m3(tmat, rmat, smat);
/* copy rot/scale part to output matrix*/
- copy_m4_m3(mat, tmat);
+ copy_m4_m3(R, tmat);
/* copy location to matrix */
- mat[3][0] = loc[0];
- mat[3][1] = loc[1];
- mat[3][2] = loc[2];
+ R[3][0] = loc[0];
+ R[3][1] = loc[1];
+ R[3][2] = loc[2];
}
-void loc_axisangle_size_to_mat4(float mat[4][4],
- const float loc[3],
- const float axis[3],
- const float angle,
- const float size[3])
+void loc_axisangle_size_to_mat4(
+ float R[4][4], const float loc[3], const float axis[3], const float angle, const float size[3])
{
float q[4];
axis_angle_to_quat(q, axis, angle);
- loc_quat_size_to_mat4(mat, loc, q, size);
+ loc_quat_size_to_mat4(R, loc, q, size);
}
/*********************************** Other ***********************************/