Skip to content

Instantly share code, notes, and snippets.

@io7m
Created December 17, 2021 11:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save io7m/f5453332c6ef268c78db1f81c63f0066 to your computer and use it in GitHub Desktop.
Save io7m/f5453332c6ef268c78db1f81c63f0066 to your computer and use it in GitHub Desktop.
/**
* Multiply the matrices {@code m0} and {@code m1}.
* @return {@code m0 * m1}
* @param m0 The left matrix
* @param m1 The right matrix
* */
public static
Matrix4x4D
multiply(
final Matrix4x4D m0,
final Matrix4x4D m1)
{
final double m0_r0c0 = m0.r0c0();
final double m0_r0c1 = m0.r0c1();
final double m0_r0c2 = m0.r0c2();
final double m0_r0c3 = m0.r0c3();
final double m0_r1c0 = m0.r1c0();
final double m0_r1c1 = m0.r1c1();
final double m0_r1c2 = m0.r1c2();
final double m0_r1c3 = m0.r1c3();
final double m0_r2c0 = m0.r2c0();
final double m0_r2c1 = m0.r2c1();
final double m0_r2c2 = m0.r2c2();
final double m0_r2c3 = m0.r2c3();
final double m0_r3c0 = m0.r3c0();
final double m0_r3c1 = m0.r3c1();
final double m0_r3c2 = m0.r3c2();
final double m0_r3c3 = m0.r3c3();
final double m1_r0c0 = m1.r0c0();
final double m1_r0c1 = m1.r0c1();
final double m1_r0c2 = m1.r0c2();
final double m1_r0c3 = m1.r0c3();
final double m1_r1c0 = m1.r1c0();
final double m1_r1c1 = m1.r1c1();
final double m1_r1c2 = m1.r1c2();
final double m1_r1c3 = m1.r1c3();
final double m1_r2c0 = m1.r2c0();
final double m1_r2c1 = m1.r2c1();
final double m1_r2c2 = m1.r2c2();
final double m1_r2c3 = m1.r2c3();
final double m1_r3c0 = m1.r3c0();
final double m1_r3c1 = m1.r3c1();
final double m1_r3c2 = m1.r3c2();
final double m1_r3c3 = m1.r3c3();
final double r0c0 =
(m0_r0c0 * m1_r0c0)
+ (m0_r0c1 * m1_r1c0)
+ (m0_r0c2 * m1_r2c0)
+ (m0_r0c3 * m1_r3c0);
final double r1c0 =
(m0_r1c0 * m1_r0c0)
+ (m0_r1c1 * m1_r1c0)
+ (m0_r1c2 * m1_r2c0)
+ (m0_r1c3 * m1_r3c0);
final double r2c0 =
(m0_r2c0 * m1_r0c0)
+ (m0_r2c1 * m1_r1c0)
+ (m0_r2c2 * m1_r2c0)
+ (m0_r2c3 * m1_r3c0);
final double r3c0 =
(m0_r3c0 * m1_r0c0)
+ (m0_r3c1 * m1_r1c0)
+ (m0_r3c2 * m1_r2c0)
+ (m0_r3c3 * m1_r3c0);
final double r0c1 =
(m0_r0c0 * m1_r0c1)
+ (m0_r0c1 * m1_r1c1)
+ (m0_r0c2 * m1_r2c1)
+ (m0_r0c3 * m1_r3c1);
final double r1c1 =
(m0_r1c0 * m1_r0c1)
+ (m0_r1c1 * m1_r1c1)
+ (m0_r1c2 * m1_r2c1)
+ (m0_r1c3 * m1_r3c1);
final double r2c1 =
(m0_r2c0 * m1_r0c1)
+ (m0_r2c1 * m1_r1c1)
+ (m0_r2c2 * m1_r2c1)
+ (m0_r2c3 * m1_r3c1);
final double r3c1 =
(m0_r3c0 * m1_r0c1)
+ (m0_r3c1 * m1_r1c1)
+ (m0_r3c2 * m1_r2c1)
+ (m0_r3c3 * m1_r3c1);
final double r0c2 =
(m0_r0c0 * m1_r0c2)
+ (m0_r0c1 * m1_r1c2)
+ (m0_r0c2 * m1_r2c2)
+ (m0_r0c3 * m1_r3c2);
final double r1c2 =
(m0_r1c0 * m1_r0c2)
+ (m0_r1c1 * m1_r1c2)
+ (m0_r1c2 * m1_r2c2)
+ (m0_r1c3 * m1_r3c2);
final double r2c2 =
(m0_r2c0 * m1_r0c2)
+ (m0_r2c1 * m1_r1c2)
+ (m0_r2c2 * m1_r2c2)
+ (m0_r2c3 * m1_r3c2);
final double r3c2 =
(m0_r3c0 * m1_r0c2)
+ (m0_r3c1 * m1_r1c2)
+ (m0_r3c2 * m1_r2c2)
+ (m0_r3c3 * m1_r3c2);
final double r0c3 =
(m0_r0c0 * m1_r0c3)
+ (m0_r0c1 * m1_r1c3)
+ (m0_r0c2 * m1_r2c3)
+ (m0_r0c3 * m1_r3c3);
final double r1c3 =
(m0_r1c0 * m1_r0c3)
+ (m0_r1c1 * m1_r1c3)
+ (m0_r1c2 * m1_r2c3)
+ (m0_r1c3 * m1_r3c3);
final double r2c3 =
(m0_r2c0 * m1_r0c3)
+ (m0_r2c1 * m1_r1c3)
+ (m0_r2c2 * m1_r2c3)
+ (m0_r2c3 * m1_r3c3);
final double r3c3 =
(m0_r3c0 * m1_r0c3)
+ (m0_r3c1 * m1_r1c3)
+ (m0_r3c2 * m1_r2c3)
+ (m0_r3c3 * m1_r3c3);
return Matrix4x4D.of(
(double) r0c0, (double) r0c1, (double) r0c2, (double) r0c3,
(double) r1c0, (double) r1c1, (double) r1c2, (double) r1c3,
(double) r2c0, (double) r2c1, (double) r2c2, (double) r2c3,
(double) r3c0, (double) r3c1, (double) r3c2, (double) r3c3);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment