Отказ от функций GetWeightedSum в пользу AppendScaled; оптимизация версоров / Replacing of GetWeightedSum onto AppendScaled; versor optimization

This commit is contained in:
Andrey Pokidov 2024-11-20 01:33:05 +07:00
parent c3dc0b2ecd
commit c66edd3432
14 changed files with 142 additions and 548 deletions

View file

@ -214,6 +214,15 @@ namespace BGC
this.r2c2 = r2;
}
public void AppendScaled(in F32Matrix2x2 matrix, float scale)
{
this.r1c1 += matrix.r1c1 * scale;
this.r1c2 += matrix.r1c2 * scale;
this.r2c1 += matrix.r2c1 * scale;
this.r2c2 += matrix.r2c2 * scale;
}
public static void Add(in F32Matrix2x2 matrix1, in F32Matrix2x2 matrix2, out F32Matrix2x2 result)
{
result.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -250,60 +259,6 @@ namespace BGC
quotient.r2c2 = dividend.r2c2 / divisor;
}
public static void GetWeightedSum2(
float weight1, in F32Matrix2x2 matrix1,
float weight2, in F32Matrix2x2 matrix2,
out F32Matrix2x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
}
public static void GetWeightedSum3(
float weight1, in F32Matrix2x2 matrix1,
float weight2, in F32Matrix2x2 matrix2,
float weight3, in F32Matrix2x2 matrix3,
out F32Matrix2x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
}
public static void GetWeightedSum4(
float weight1, in F32Matrix2x2 matrix1,
float weight2, in F32Matrix2x2 matrix2,
float weight3, in F32Matrix2x2 matrix3,
float weight4, in F32Matrix2x2 matrix4,
out F32Matrix2x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
}
public static void GetWeightedSum5(
float weight1, in F32Matrix2x2 matrix1,
float weight2, in F32Matrix2x2 matrix2,
float weight3, in F32Matrix2x2 matrix3,
float weight4, in F32Matrix2x2 matrix4,
float weight5, in F32Matrix2x2 matrix5,
out F32Matrix2x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
}
public static void GetRightProduct(in F32Matrix2x2 matrix, in F32Vector2 vector, out F32Vector2 result)
{
float x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2;

View file

@ -180,6 +180,18 @@ namespace BGC
this.r3c2 = r3;
}
public void AppendScaled(in F32Matrix2x3 matrix, float scale)
{
this.r1c1 += matrix.r1c1 * scale;
this.r1c2 += matrix.r1c2 * scale;
this.r2c1 += matrix.r2c1 * scale;
this.r2c2 += matrix.r2c2 * scale;
this.r3c1 += matrix.r3c1 * scale;
this.r3c2 += matrix.r3c2 * scale;
}
public static void Add(in F32Matrix2x3 matrix1, in F32Matrix2x3 matrix2, out F32Matrix2x3 sum)
{
sum.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -228,72 +240,6 @@ namespace BGC
quotient.r3c2 = dividend.r3c2 / divisor;
}
public static void GetWeightedSum2(
float weight1, in F32Matrix2x3 matrix1,
float weight2, in F32Matrix2x3 matrix2,
out F32Matrix2x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2;
}
public static void GetWeightedSum3(
float weight1, in F32Matrix2x3 matrix1,
float weight2, in F32Matrix2x3 matrix2,
float weight3, in F32Matrix2x3 matrix3,
out F32Matrix2x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2 + matrix3.r3c1 * weight3;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2 + matrix3.r3c2 * weight3;
}
public static void GetWeightedSum4(
float weight1, in F32Matrix2x3 matrix1,
float weight2, in F32Matrix2x3 matrix2,
float weight3, in F32Matrix2x3 matrix3,
float weight4, in F32Matrix2x3 matrix4,
out F32Matrix2x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4);
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4);
}
public static void GetWeightedSum5(
float weight1, in F32Matrix2x3 matrix1,
float weight2, in F32Matrix2x3 matrix2,
float weight3, in F32Matrix2x3 matrix3,
float weight4, in F32Matrix2x3 matrix4,
float weight5, in F32Matrix2x3 matrix5,
out F32Matrix2x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4) + matrix5.r3c1 * weight5;
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4) + matrix5.r3c2 * weight5;
}
public static void GetRightProduct(in F32Matrix2x3 matrix, in F32Vector2 vector, out F32Vector3 result)
{
result.x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2;

View file

@ -167,6 +167,17 @@ namespace BGC
this.r2c3 = r2;
}
public void AppendScaled(in F32Matrix3x2 matrix, float scale)
{
this.r1c1 += matrix.r1c1 * scale;
this.r1c2 += matrix.r1c2 * scale;
this.r1c3 += matrix.r1c3 * scale;
this.r2c1 += matrix.r2c1 * scale;
this.r2c2 += matrix.r2c2 * scale;
this.r2c3 += matrix.r2c3 * scale;
}
public static void Add(in F32Matrix3x2 matrix1, in F32Matrix3x2 matrix2, out F32Matrix3x2 sum)
{
sum.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -211,68 +222,6 @@ namespace BGC
quotient.r2c3 = dividend.r2c3 / divisor;
}
public static void GetWeightedSum2(
float weight1, in F32Matrix3x2 matrix1,
float weight2, in F32Matrix3x2 matrix2,
out F32Matrix3x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2;
}
public static void GetWeightedSum3(
float weight1, in F32Matrix3x2 matrix1,
float weight2, in F32Matrix3x2 matrix2,
float weight3, in F32Matrix3x2 matrix3,
out F32Matrix3x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2 + matrix3.r1c3 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2 + matrix3.r2c3 * weight3;
}
public static void GetWeightedSum4(
float weight1, in F32Matrix3x2 matrix1,
float weight2, in F32Matrix3x2 matrix2,
float weight3, in F32Matrix3x2 matrix3,
float weight4, in F32Matrix3x2 matrix4,
out F32Matrix3x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4);
}
public static void GetWeightedSum5(
float weight1, in F32Matrix3x2 matrix1,
float weight2, in F32Matrix3x2 matrix2,
float weight3, in F32Matrix3x2 matrix3,
float weight4, in F32Matrix3x2 matrix4,
float weight5, in F32Matrix3x2 matrix5,
out F32Matrix3x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4) + matrix5.r1c3 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4) + matrix5.r2c3 * weight5;
}
public static void GetRightProduct(in F32Matrix3x2 matrix, in F32Vector3 vector, out F32Vector2 result)
{
result.x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2 + matrix.r1c3 * vector.x3;

View file

@ -324,6 +324,21 @@ namespace BGC
this.r3c3 = r3;
}
public void AppendScaled(in F32Matrix3x3 matrix, float scale)
{
this.r1c1 += matrix.r1c1* scale;
this.r1c2 += matrix.r1c2* scale;
this.r1c3 += matrix.r1c3* scale;
this.r2c1 += matrix.r2c1* scale;
this.r2c2 += matrix.r2c2* scale;
this.r2c3 += matrix.r2c3* scale;
this.r3c1 += matrix.r3c1* scale;
this.r3c2 += matrix.r3c2* scale;
this.r3c3 += matrix.r3c3* scale;
}
public static void Add(in F32Matrix3x3 matrix1, in F32Matrix3x3 matrix2, out F32Matrix3x3 sum)
{
sum.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -384,84 +399,6 @@ namespace BGC
quotient.r3c3 = dividend.r3c3 / divisor;
}
public static void GetWeightedSum2(
float weight1, in F32Matrix3x3 matrix1,
float weight2, in F32Matrix3x3 matrix2,
out F32Matrix3x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2;
sum.r3c3 = matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2;
}
public static void GetWeightedSum3(
float weight1, in F32Matrix3x3 matrix1,
float weight2, in F32Matrix3x3 matrix2,
float weight3, in F32Matrix3x3 matrix3,
out F32Matrix3x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2 + matrix3.r1c3 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2 + matrix3.r2c3 * weight3;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2 + matrix3.r3c1 * weight3;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2 + matrix3.r3c2 * weight3;
sum.r3c3 = matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2 + matrix3.r3c3 * weight3;
}
public static void GetWeightedSum4(
float weight1, in F32Matrix3x3 matrix1,
float weight2, in F32Matrix3x3 matrix2,
float weight3, in F32Matrix3x3 matrix3,
float weight4, in F32Matrix3x3 matrix4,
out F32Matrix3x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4);
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4);
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4);
sum.r3c3 = (matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2) + (matrix3.r3c3 * weight3 + matrix4.r3c3 * weight4);
}
public static void GetWeightedSum5(
float weight1, in F32Matrix3x3 matrix1,
float weight2, in F32Matrix3x3 matrix2,
float weight3, in F32Matrix3x3 matrix3,
float weight4, in F32Matrix3x3 matrix4,
float weight5, in F32Matrix3x3 matrix5,
out F32Matrix3x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4) + matrix5.r1c3 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4) + matrix5.r2c3 * weight5;
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4) + matrix5.r3c1 * weight5;
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4) + matrix5.r3c2 * weight5;
sum.r3c3 = (matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2) + (matrix3.r3c3 * weight3 + matrix4.r3c3 * weight4) + matrix5.r3c3 * weight5;
}
public static void GetRightProduct(in F32Matrix3x3 matrix, in F32Vector3 vector, out F32Vector3 result)
{
float x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2 + matrix.r1c3 * vector.x3;

View file

@ -134,10 +134,10 @@ namespace BGC
this.x2 = -(float)vector.x2;
}
public void AppendScaled(F32Vector2 scalableSummand, float scale)
public void AppendScaled(F32Vector2 summand, float scale)
{
this.x1 += scalableSummand.x1 * scale;
this.x2 += scalableSummand.x2 * scale;
this.x1 += summand.x1 * scale;
this.x2 += summand.x2 * scale;
}
public readonly override string ToString()

View file

@ -146,11 +146,11 @@ namespace BGC
this.x3 = -(float)vector.x3;
}
public void AppendScaled(F32Vector3 scalableSummand, float scale)
public void AppendScaled(F32Vector3 summand, float scale)
{
this.x1 += scalableSummand.x1 * scale;
this.x2 += scalableSummand.x2 * scale;
this.x3 += scalableSummand.x3 * scale;
this.x1 += summand.x1 * scale;
this.x2 += summand.x2 * scale;
this.x3 += summand.x3 * scale;
}
public readonly override string ToString()

View file

@ -270,12 +270,22 @@ namespace BGC
public static void Combine(in F32Versor second, in F32Versor first, out F32Versor result)
{
LoadValues(
(second.s0 * first.s0 - second.x1 * first.x1) - (second.x2 * first.x2 + second.x3 * first.x3),
(second.x1 * first.s0 + second.s0 * first.x1) - (second.x3 * first.x2 - second.x2 * first.x3),
(second.x2 * first.s0 + second.s0 * first.x2) - (second.x1 * first.x3 - second.x3 * first.x1),
(second.x3 * first.s0 + second.s0 * first.x3) - (second.x2 * first.x1 - second.x1 * first.x2),
out result);
float s0 = (second.s0 * first.s0 - second.x1 * first.x1) - (second.x2 * first.x2 + second.x3 * first.x3);
float x1 = (second.x1 * first.s0 + second.s0 * first.x1) - (second.x3 * first.x2 - second.x2 * first.x3);
float x2 = (second.x2 * first.s0 + second.s0 * first.x2) - (second.x1 * first.x3 - second.x3 * first.x1);
float x3 = (second.x3 * first.s0 + second.s0 * first.x3) - (second.x2 * first.x1 - second.x1 * first.x2);
float squareModule = (s0 * s0 + x1 * x1) + (x2 * x2 + x3 * x3);
result.s0 = s0;
result.x1 = x1;
result.x2 = x2;
result.x3 = x3;
if (squareModule < 1.0f - F32Utility.TWO_EPSYLON || 1.0f + F32Utility.TWO_EPSYLON < squareModule)
{
result.Normalize(squareModule);
}
}
public static void LoadIdle(out F32Versor versor)

View file

@ -214,6 +214,15 @@ namespace BGC
this.r2c2 = r2;
}
public void AppendScaled(in F64Matrix2x2 matrix, double scale)
{
this.r1c1 += matrix.r1c1 * scale;
this.r1c2 += matrix.r1c2 * scale;
this.r2c1 += matrix.r2c1 * scale;
this.r2c2 += matrix.r2c2 * scale;
}
public static void Add(in F64Matrix2x2 matrix1, in F64Matrix2x2 matrix2, out F64Matrix2x2 sum)
{
sum.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -250,60 +259,6 @@ namespace BGC
quotient.r2c2 = dividend.r2c2 / divisor;
}
public static void GetWeightedSum2(
double weight1, in F64Matrix2x2 matrix1,
double weight2, in F64Matrix2x2 matrix2,
out F64Matrix2x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
}
public static void GetWeightedSum3(
float weight1, in F32Matrix2x2 matrix1,
float weight2, in F32Matrix2x2 matrix2,
float weight3, in F32Matrix2x2 matrix3,
out F64Matrix2x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
}
public static void GetWeightedSum4(
float weight1, in F32Matrix2x2 matrix1,
float weight2, in F32Matrix2x2 matrix2,
float weight3, in F32Matrix2x2 matrix3,
float weight4, in F32Matrix2x2 matrix4,
out F64Matrix2x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
}
public static void GetWeightedSum5(
double weight1, in F64Matrix2x2 matrix1,
double weight2, in F64Matrix2x2 matrix2,
double weight3, in F64Matrix2x2 matrix3,
double weight4, in F64Matrix2x2 matrix4,
double weight5, in F64Matrix2x2 matrix5,
out F64Matrix2x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
}
public static void GetRightProduct(in F64Matrix2x2 matrix, in F64Vector2 vector, out F64Vector2 result)
{
double x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2;

View file

@ -180,6 +180,18 @@ namespace BGC
this.r3c2 = r3;
}
public void AppendScaled(in F64Matrix2x3 matrix, double scale)
{
this.r1c1 += matrix.r1c1 * scale;
this.r1c2 += matrix.r1c2 * scale;
this.r2c1 += matrix.r2c1 * scale;
this.r2c2 += matrix.r2c2 * scale;
this.r3c1 += matrix.r3c1 * scale;
this.r3c2 += matrix.r3c2 * scale;
}
public static void Add(in F64Matrix2x3 matrix1, in F64Matrix2x3 matrix2, out F64Matrix2x3 sum)
{
sum.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -228,72 +240,6 @@ namespace BGC
quotient.r3c2 = dividend.r3c2 / divisor;
}
public static void GetWeightedSum2(
double weight1, in F64Matrix2x3 matrix1,
double weight2, in F64Matrix2x3 matrix2,
out F64Matrix2x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2;
}
public static void GetWeightedSum3(
double weight1, in F64Matrix2x3 matrix1,
double weight2, in F64Matrix2x3 matrix2,
double weight3, in F64Matrix2x3 matrix3,
out F64Matrix2x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2 + matrix3.r3c1 * weight3;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2 + matrix3.r3c2 * weight3;
}
public static void GetWeightedSum4(
double weight1, in F64Matrix2x3 matrix1,
double weight2, in F64Matrix2x3 matrix2,
double weight3, in F64Matrix2x3 matrix3,
double weight4, in F64Matrix2x3 matrix4,
out F64Matrix2x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4);
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4);
}
public static void GetWeightedSum5(
double weight1, in F64Matrix2x3 matrix1,
double weight2, in F64Matrix2x3 matrix2,
double weight3, in F64Matrix2x3 matrix3,
double weight4, in F64Matrix2x3 matrix4,
double weight5, in F64Matrix2x3 matrix5,
out F64Matrix2x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4) + matrix5.r3c1 * weight5;
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4) + matrix5.r3c2 * weight5;
}
public static void GetRightProduct(in F64Matrix2x3 matrix, in F64Vector2 vector, out F64Vector3 result)
{
result.x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2;

View file

@ -170,6 +170,17 @@ namespace BGC
this.r2c3 = r2;
}
public void AppendScaled(in F64Matrix3x2 matrix, double scale)
{
this.r1c1 += matrix.r1c1 * scale;
this.r1c2 += matrix.r1c2 * scale;
this.r1c3 += matrix.r1c3 * scale;
this.r2c1 += matrix.r2c1 * scale;
this.r2c2 += matrix.r2c2 * scale;
this.r2c3 += matrix.r2c3 * scale;
}
public static void Add(in F64Matrix3x2 matrix1, in F64Matrix3x2 matrix2, out F64Matrix3x2 sum)
{
sum.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -214,68 +225,6 @@ namespace BGC
quotient.r2c3 = dividend.r2c3 / divisor;
}
public static void GetWeightedSum2(
double weight1, in F64Matrix3x2 matrix1,
double weight2, in F64Matrix3x2 matrix2,
out F64Matrix3x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2;
}
public static void GetWeightedSum3(
double weight1, in F64Matrix3x2 matrix1,
double weight2, in F64Matrix3x2 matrix2,
double weight3, in F64Matrix3x2 matrix3,
out F64Matrix3x2 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2 + matrix3.r1c3 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2 + matrix3.r2c3 * weight3;
}
public static void GetWeightedSum4(
double weight1, in F64Matrix3x2 matrix1,
double weight2, in F64Matrix3x2 matrix2,
double weight3, in F64Matrix3x2 matrix3,
double weight4, in F64Matrix3x2 matrix4,
out F64Matrix3x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4);
}
public static void GetWeightedSum5(
double weight1, in F64Matrix3x2 matrix1,
double weight2, in F64Matrix3x2 matrix2,
double weight3, in F64Matrix3x2 matrix3,
double weight4, in F64Matrix3x2 matrix4,
double weight5, in F64Matrix3x2 matrix5,
out F64Matrix3x2 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4) + matrix5.r1c3 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4) + matrix5.r2c3 * weight5;
}
public static void GetRightProduct(in F64Matrix3x2 matrix, in F64Vector3 vector, out F64Vector2 result)
{
result.x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2 + matrix.r1c3 * vector.x3;

View file

@ -320,6 +320,21 @@ namespace BGC
this.r3c3 = r3;
}
public void AppendScaled(in F64Matrix3x3 matrix, double scale)
{
this.r1c1 += matrix.r1c1 * scale;
this.r1c2 += matrix.r1c2 * scale;
this.r1c3 += matrix.r1c3 * scale;
this.r2c1 += matrix.r2c1 * scale;
this.r2c2 += matrix.r2c2 * scale;
this.r2c3 += matrix.r2c3 * scale;
this.r3c1 += matrix.r3c1 * scale;
this.r3c2 += matrix.r3c2 * scale;
this.r3c3 += matrix.r3c3 * scale;
}
public static void Add(in F64Matrix3x3 matrix1, in F64Matrix3x3 matrix2, out F64Matrix3x3 sum)
{
sum.r1c1 = matrix1.r1c1 + matrix2.r1c1;
@ -380,84 +395,6 @@ namespace BGC
quotient.r3c3 = dividend.r3c3 / divisor;
}
public static void GetWeightedSum2(
double weight1, in F64Matrix3x3 matrix1,
double weight2, in F64Matrix3x3 matrix2,
out F64Matrix3x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2;
sum.r3c3 = matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2;
}
public static void GetWeightedSum3(
double weight1, in F64Matrix3x3 matrix1,
double weight2, in F64Matrix3x3 matrix2,
double weight3, in F64Matrix3x3 matrix3,
out F64Matrix3x3 sum)
{
sum.r1c1 = matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2 + matrix3.r1c1 * weight3;
sum.r1c2 = matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2 + matrix3.r1c2 * weight3;
sum.r1c3 = matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2 + matrix3.r1c3 * weight3;
sum.r2c1 = matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2 + matrix3.r2c1 * weight3;
sum.r2c2 = matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2 + matrix3.r2c2 * weight3;
sum.r2c3 = matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2 + matrix3.r2c3 * weight3;
sum.r3c1 = matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2 + matrix3.r3c1 * weight3;
sum.r3c2 = matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2 + matrix3.r3c2 * weight3;
sum.r3c3 = matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2 + matrix3.r3c3 * weight3;
}
public static void GetWeightedSum4(
double weight1, in F64Matrix3x3 matrix1,
double weight2, in F64Matrix3x3 matrix2,
double weight3, in F64Matrix3x3 matrix3,
double weight4, in F64Matrix3x3 matrix4,
out F64Matrix3x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4);
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4);
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4);
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4);
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4);
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4);
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4);
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4);
sum.r3c3 = (matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2) + (matrix3.r3c3 * weight3 + matrix4.r3c3 * weight4);
}
public static void GetWeightedSum5(
double weight1, in F64Matrix3x3 matrix1,
double weight2, in F64Matrix3x3 matrix2,
double weight3, in F64Matrix3x3 matrix3,
double weight4, in F64Matrix3x3 matrix4,
double weight5, in F64Matrix3x3 matrix5,
out F64Matrix3x3 sum)
{
sum.r1c1 = (matrix1.r1c1 * weight1 + matrix2.r1c1 * weight2) + (matrix3.r1c1 * weight3 + matrix4.r1c1 * weight4) + matrix5.r1c1 * weight5;
sum.r1c2 = (matrix1.r1c2 * weight1 + matrix2.r1c2 * weight2) + (matrix3.r1c2 * weight3 + matrix4.r1c2 * weight4) + matrix5.r1c2 * weight5;
sum.r1c3 = (matrix1.r1c3 * weight1 + matrix2.r1c3 * weight2) + (matrix3.r1c3 * weight3 + matrix4.r1c3 * weight4) + matrix5.r1c3 * weight5;
sum.r2c1 = (matrix1.r2c1 * weight1 + matrix2.r2c1 * weight2) + (matrix3.r2c1 * weight3 + matrix4.r2c1 * weight4) + matrix5.r2c1 * weight5;
sum.r2c2 = (matrix1.r2c2 * weight1 + matrix2.r2c2 * weight2) + (matrix3.r2c2 * weight3 + matrix4.r2c2 * weight4) + matrix5.r2c2 * weight5;
sum.r2c3 = (matrix1.r2c3 * weight1 + matrix2.r2c3 * weight2) + (matrix3.r2c3 * weight3 + matrix4.r2c3 * weight4) + matrix5.r2c3 * weight5;
sum.r3c1 = (matrix1.r3c1 * weight1 + matrix2.r3c1 * weight2) + (matrix3.r3c1 * weight3 + matrix4.r3c1 * weight4) + matrix5.r3c1 * weight5;
sum.r3c2 = (matrix1.r3c2 * weight1 + matrix2.r3c2 * weight2) + (matrix3.r3c2 * weight3 + matrix4.r3c2 * weight4) + matrix5.r3c2 * weight5;
sum.r3c3 = (matrix1.r3c3 * weight1 + matrix2.r3c3 * weight2) + (matrix3.r3c3 * weight3 + matrix4.r3c3 * weight4) + matrix5.r3c3 * weight5;
}
public static void GetRightProduct(in F64Matrix3x3 matrix, in F64Vector3 vector, out F64Vector3 result)
{
double x1 = matrix.r1c1 * vector.x1 + matrix.r1c2 * vector.x2 + matrix.r1c3 * vector.x3;

View file

@ -134,10 +134,10 @@ namespace BGC
this.x2 = -vector.x2;
}
public void AppendScaled(F64Vector2 scalableSummand, double scale)
public void AppendScaled(F64Vector2 summand, double scale)
{
this.x1 += scalableSummand.x1 * scale;
this.x2 += scalableSummand.x2 * scale;
this.x1 += summand.x1 * scale;
this.x2 += summand.x2 * scale;
}
public readonly override string ToString()

View file

@ -146,11 +146,11 @@ namespace BGC
this.x3 = -vector.x3;
}
public void AppendScaled(F64Vector3 scalableSummand, double scale)
public void AppendScaled(F64Vector3 summand, double scale)
{
this.x1 += scalableSummand.x1 * scale;
this.x2 += scalableSummand.x2 * scale;
this.x3 += scalableSummand.x3 * scale;
this.x1 += summand.x1 * scale;
this.x2 += summand.x2 * scale;
this.x3 += summand.x3 * scale;
}
public readonly override string ToString()

View file

@ -278,12 +278,22 @@ namespace BGC
public static void Combine(in F64Versor second, in F64Versor first, out F64Versor result)
{
LoadValues(
(second.s0 * first.s0 - second.x1 * first.x1) - (second.x2 * first.x2 + second.x3 * first.x3),
(second.x1 * first.s0 + second.s0 * first.x1) - (second.x3 * first.x2 - second.x2 * first.x3),
(second.x2 * first.s0 + second.s0 * first.x2) - (second.x1 * first.x3 - second.x3 * first.x1),
(second.x3 * first.s0 + second.s0 * first.x3) - (second.x2 * first.x1 - second.x1 * first.x2),
out result);
double s0 = (second.s0 * first.s0 - second.x1 * first.x1) - (second.x2 * first.x2 + second.x3 * first.x3);
double x1 = (second.x1 * first.s0 + second.s0 * first.x1) - (second.x3 * first.x2 - second.x2 * first.x3);
double x2 = (second.x2 * first.s0 + second.s0 * first.x2) - (second.x1 * first.x3 - second.x3 * first.x1);
double x3 = (second.x3 * first.s0 + second.s0 * first.x3) - (second.x2 * first.x1 - second.x1 * first.x2);
double squareModule = (s0 * s0 + x1 * x1) + (x2 * x2 + x3 * x3);
result.s0 = s0;
result.x1 = x1;
result.x2 = x2;
result.x3 = x3;
if (squareModule < 1.0 - F64Utility.TWO_EPSYLON || 1.0 + F64Utility.TWO_EPSYLON < squareModule)
{
result.Normalize(squareModule);
}
}
public static void LoadIdle(out F64Versor versor)