bgc-net/BasicGeometry/MatrixProductFP32.cs

157 lines
6.7 KiB
C#

/*
* Author: Andrey Pokidov
* License: Apache-2.0
* Date: 11 Nov 2024
*/
namespace BasicGeometry
{
public class MatrixProductFP32
{
public static void Get2x2At2x2(in Matrix2x2FP32 left, in Matrix2x2FP32 right, out Matrix2x2FP32 product)
{
float r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1;
float r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2;
float r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1;
float r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2;
product.r1c1 = r1c1;
product.r1c2 = r1c2;
product.r2c1 = r2c1;
product.r2c2 = r2c2;
}
public static void Get2x2At3x2(in Matrix2x2FP32 left, in Matrix3x2FP32 right, out Matrix3x2FP32 product)
{
float r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1;
float r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2;
float r1c3 = left.r1c1 * right.r1c3 + left.r1c2 * right.r2c3;
float r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1;
float r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2;
float r2c3 = left.r2c1 * right.r1c3 + left.r2c2 * right.r2c3;
product.r1c1 = r1c1;
product.r1c2 = r1c2;
product.r1c3 = r1c3;
product.r2c1 = r2c1;
product.r2c2 = r2c2;
product.r2c3 = r2c3;
}
public static void Get2x3At2x2(in Matrix2x3FP32 left, in Matrix2x2FP32 right, out Matrix2x3FP32 product)
{
float r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1;
float r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2;
float r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1;
float r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2;
float r3c1 = left.r3c1 * right.r1c1 + left.r3c2 * right.r2c1;
float r3c2 = left.r3c1 * right.r1c2 + left.r3c2 * right.r2c2;
product.r1c1 = r1c1;
product.r1c2 = r1c2;
product.r2c1 = r2c1;
product.r2c2 = r2c2;
product.r3c1 = r3c1;
product.r3c2 = r3c2;
}
public static void Get2x3At3x2(in Matrix2x3FP32 left, in Matrix3x2FP32 right, out Matrix3x3FP32 product)
{
product.r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1;
product.r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2;
product.r1c3 = left.r1c1 * right.r1c3 + left.r1c2 * right.r2c3;
product.r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1;
product.r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2;
product.r2c3 = left.r2c1 * right.r1c3 + left.r2c2 * right.r2c3;
product.r3c1 = left.r3c1 * right.r1c1 + left.r3c2 * right.r2c1;
product.r3c2 = left.r3c1 * right.r1c2 + left.r3c2 * right.r2c2;
product.r3c3 = left.r3c1 * right.r1c2 + left.r3c2 * right.r2c3;
}
public static void Get3x2At3x3(in Matrix3x2FP32 left, in Matrix3x3FP32 right, out Matrix3x2FP32 product)
{
float r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1 + left.r1c3 * right.r3c1;
float r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2 + left.r1c3 * right.r3c2;
float r1c3 = left.r1c1 * right.r1c3 + left.r1c2 * right.r2c3 + left.r1c3 * right.r3c3;
float r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1 + left.r2c3 * right.r3c1;
float r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2 + left.r2c3 * right.r3c2;
float r2c3 = left.r2c1 * right.r1c3 + left.r2c2 * right.r2c3 + left.r2c3 * right.r3c3;
product.r1c1 = r1c1;
product.r1c2 = r1c2;
product.r1c3 = r1c3;
product.r2c1 = r2c1;
product.r2c2 = r2c2;
product.r2c3 = r2c3;
}
public static void Get3x2At2x3(in Matrix3x2FP32 left, in Matrix2x3FP32 right, out Matrix2x2FP32 product)
{
product.r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1 + left.r1c3 * right.r3c1;
product.r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2 + left.r1c3 * right.r3c2;
product.r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1 + left.r2c3 * right.r3c1;
product.r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2 + left.r2c3 * right.r3c2;
}
public static void Get3x3At2x3(in Matrix3x3FP32 left, in Matrix2x3FP32 right, out Matrix2x3FP32 product)
{
float r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1 + left.r1c3 * right.r3c1;
float r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2 + left.r1c3 * right.r3c2;
float r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1 + left.r2c3 * right.r3c1;
float r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2 + left.r2c3 * right.r3c2;
float r3c1 = left.r3c1 * right.r1c1 + left.r3c2 * right.r2c1 + left.r3c3 * right.r3c1;
float r3c2 = left.r3c1 * right.r1c2 + left.r3c2 * right.r2c2 + left.r3c3 * right.r3c2;
product.r1c1 = r1c1;
product.r1c2 = r1c2;
product.r2c1 = r2c1;
product.r2c2 = r2c2;
product.r3c1 = r3c1;
product.r3c2 = r3c2;
}
public static void Get3x3At3x3(in Matrix3x3FP32 left, in Matrix3x3FP32 right, out Matrix3x3FP32 product)
{
float r1c1 = left.r1c1 * right.r1c1 + left.r1c2 * right.r2c1 + left.r1c3 * right.r3c1;
float r1c2 = left.r1c1 * right.r1c2 + left.r1c2 * right.r2c2 + left.r1c3 * right.r3c2;
float r1c3 = left.r1c1 * right.r1c3 + left.r1c2 * right.r2c3 + left.r1c3 * right.r3c3;
float r2c1 = left.r2c1 * right.r1c1 + left.r2c2 * right.r2c1 + left.r2c3 * right.r3c1;
float r2c2 = left.r2c1 * right.r1c2 + left.r2c2 * right.r2c2 + left.r2c3 * right.r3c2;
float r2c3 = left.r2c1 * right.r1c3 + left.r2c2 * right.r2c3 + left.r2c3 * right.r3c3;
float r3c1 = left.r3c1 * right.r1c1 + left.r3c2 * right.r2c1 + left.r3c3 * right.r3c1;
float r3c2 = left.r3c1 * right.r1c2 + left.r3c2 * right.r2c2 + left.r3c3 * right.r3c2;
float r3c3 = left.r3c1 * right.r1c3 + left.r3c2 * right.r2c3 + left.r3c3 * right.r3c3;
product.r1c1 = r1c1;
product.r1c2 = r1c2;
product.r1c3 = r1c3;
product.r2c1 = r2c1;
product.r2c2 = r2c2;
product.r2c3 = r2c3;
product.r3c1 = r3c1;
product.r3c2 = r3c2;
product.r3c3 = r3c3;
}
}
}