Переименование проектов и оптимизация вычислений / Renaming of projects and optimization of computations

This commit is contained in:
Andrey Pokidov 2024-12-04 23:23:44 +07:00
parent 37d86bc4c1
commit 75e5c02609
36 changed files with 177 additions and 379 deletions

View file

@ -3,11 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BGC", "BGC\BGC.csproj", "{D1869DF0-7B61-4B6F-8C66-6EEF3916FE0A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicGeometry", "BasicGeometry\BasicGeometry.csproj", "{D1869DF0-7B61-4B6F-8C66-6EEF3916FE0A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BGCDev", "BGCDev\BGCDev.csproj", "{3D09FF57-02E6-449D-9DE7-0843633FCBA0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicGeometryDev", "BasicGeometryDev\BasicGeometryDev.csproj", "{3D09FF57-02E6-449D-9DE7-0843633FCBA0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BGCTest", "BGCTest\BGCTest.csproj", "{51A07B27-43FF-4A12-AEC1-50D32EDA3815}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BasicGeometryTest", "BasicGeometryTest\BasicGeometryTest.csproj", "{51A07B27-43FF-4A12-AEC1-50D32EDA3815}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

View file

@ -20,7 +20,7 @@
* Date: 1 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public enum AngleUnit
{

View file

@ -21,7 +21,7 @@ using System;
* Date: 1 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public static class FP32Angle
{

View file

@ -4,7 +4,7 @@
* Date: 18 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP32Degrees
{

View file

@ -21,29 +21,16 @@ using System;
* Date: 10 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Matrix2x2
{
public float r1c1, r1c2;
public float r2c1, r2c2;
public FP32Matrix2x2()
{
this.r1c1 = 0.0f;
this.r1c2 = 0.0f;
this.r2c1 = 0.0f;
this.r2c2 = 0.0f;
}
public float r1c1 = 0.0f, r1c2 = 0.0f;
public float r2c1 = 0.0f, r2c2 = 0.0f;
public FP32Matrix2x2(float d1, float d2)
{
this.r1c1 = d1;
this.r1c2 = 0.0f;
this.r2c1 = 0.0f;
this.r2c2 = d2;
}
@ -96,11 +83,13 @@ namespace BGC
float r2c1 = -this.r2c1;
float r2c2 = this.r1c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
float multiplier = 1.0f / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r1c1 = r1c1 * multiplier;
this.r1c2 = r1c2 * multiplier;
this.r2c1 = r2c1 * multiplier;
this.r2c2 = r2c2 * multiplier;
return true;
}
@ -181,11 +170,13 @@ namespace BGC
float r2c1 = -matrix.r2c1;
float r2c2 = matrix.r1c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
float multiplier = 1.0f / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r1c1 = r1c1 * multiplier;
this.r1c2 = r1c2 * multiplier;
this.r2c1 = r2c1 * multiplier;
this.r2c2 = r2c2 * multiplier;
return true;
}
@ -252,11 +243,7 @@ namespace BGC
public static void Divide(in FP32Matrix2x2 dividend, float divisor, out FP32Matrix2x2 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
Multiply(dividend, 1.0f / divisor, out quotient);
}
public static void GetRightProduct(in FP32Matrix2x2 matrix, in FP32Vector2 vector, out FP32Vector2 result)

View file

@ -20,25 +20,13 @@ using System;
* Author: Andrey Pokidov
* Date: 11 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Matrix2x3
{
public float r1c1, r1c2;
public float r2c1, r2c2;
public float r3c1, r3c2;
public FP32Matrix2x3()
{
this.r1c1 = 0.0f;
this.r1c2 = 0.0f;
this.r2c1 = 0.0f;
this.r2c2 = 0.0f;
this.r3c1 = 0.0f;
this.r3c2 = 0.0f;
}
public float r1c1 = 0.0f, r1c2 = 0.0f;
public float r2c1 = 0.0f, r2c2 = 0.0f;
public float r3c1 = 0.0f, r3c2 = 0.0f;
public FP32Matrix2x3(in FP32Matrix2x3 matrix)
{
@ -230,14 +218,7 @@ namespace BGC
public static void Divide(in FP32Matrix2x3 dividend, float divisor, out FP32Matrix2x3 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
quotient.r3c1 = dividend.r3c1 / divisor;
quotient.r3c2 = dividend.r3c2 / divisor;
Multiply(dividend, 1.0f / divisor, out quotient);
}
public static void GetRightProduct(in FP32Matrix2x3 matrix, in FP32Vector2 vector, out FP32Vector3 result)

View file

@ -18,23 +18,12 @@
* Author: Andrey Pokidov
* Date: 11 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Matrix3x2
{
public float r1c1, r1c2, r1c3;
public float r2c1, r2c2, r2c3;
public FP32Matrix3x2()
{
this.r1c1 = 0.0f;
this.r1c2 = 0.0f;
this.r1c3 = 0.0f;
this.r2c1 = 0.0f;
this.r2c2 = 0.0f;
this.r2c3 = 0.0f;
}
public float r1c1 = 0.0f, r1c2 = 0.0f, r1c3 = 0.0f;
public float r2c1 = 0.0f, r2c2 = 0.0f, r2c3 = 0.0f;
public FP32Matrix3x2(in FP32Matrix3x2 matrix)
{
@ -213,13 +202,7 @@ namespace BGC
public static void Divide(in FP32Matrix3x2 dividend, float divisor, out FP32Matrix3x2 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r1c3 = dividend.r1c3 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
quotient.r2c3 = dividend.r2c3 / divisor;
Multiply(dividend, 1.0f / divisor, out quotient);
}
public static void GetRightProduct(in FP32Matrix3x2 matrix, in FP32Vector3 vector, out FP32Vector2 result)

View file

@ -21,43 +21,18 @@ using System;
* Date: 10 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Matrix3x3
{
public float r1c1, r1c2, r1c3;
public float r2c1, r2c2, r2c3;
public float r3c1, r3c2, r3c3;
public FP32Matrix3x3()
{
this.r1c1 = 0.0f;
this.r1c2 = 0.0f;
this.r1c3 = 0.0f;
this.r2c1 = 0.0f;
this.r2c2 = 0.0f;
this.r2c3 = 0.0f;
this.r3c1 = 0.0f;
this.r3c2 = 0.0f;
this.r3c3 = 0.0f;
}
public float r1c1 = 0.0f, r1c2 = 0.0f, r1c3 = 0.0f;
public float r2c1 = 0.0f, r2c2 = 0.0f, r2c3 = 0.0f;
public float r3c1 = 0.0f, r3c2 = 0.0f, r3c3 = 0.0f;
public FP32Matrix3x3(float d1, float d2, float d3)
{
this.r1c1 = d1;
this.r1c2 = 0.0f;
this.r1c3 = 0.0f;
this.r2c1 = 0.0f;
this.r2c2 = d2;
this.r2c3 = 0.0f;
this.r3c1 = 0.0f;
this.r3c2 = 0.0f;
this.r3c3 = d3;
}
@ -131,17 +106,19 @@ namespace BGC
float r3c2 = this.r1c2 * this.r3c1 - this.r1c1 * this.r3c2;
float r3c3 = this.r1c1 * this.r2c2 - this.r1c2 * this.r2c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
this.r1c3 = r1c3 / determinant;
float mutiplier = 1.0f / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r2c3 = r2c3 / determinant;
this.r1c1 = r1c1 * mutiplier;
this.r1c2 = r1c2 * mutiplier;
this.r1c3 = r1c3 * mutiplier;
this.r3c1 = r3c1 / determinant;
this.r3c2 = r3c2 / determinant;
this.r3c3 = r3c3 / determinant;
this.r2c1 = r2c1 * mutiplier;
this.r2c2 = r2c2 * mutiplier;
this.r2c3 = r2c3 * mutiplier;
this.r3c1 = r3c1 * mutiplier;
this.r3c2 = r3c2 * mutiplier;
this.r3c3 = r3c3 * mutiplier;
return true;
}
@ -267,17 +244,19 @@ namespace BGC
float r3c2 = matrix.r1c2 * matrix.r3c1 - matrix.r1c1 * matrix.r3c2;
float r3c3 = matrix.r1c1 * matrix.r2c2 - matrix.r1c2 * matrix.r2c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
this.r1c3 = r1c3 / determinant;
float mutiplier = 1.0f / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r2c3 = r2c3 / determinant;
this.r1c1 = r1c1 * mutiplier;
this.r1c2 = r1c2 * mutiplier;
this.r1c3 = r1c3 * mutiplier;
this.r3c1 = r3c1 / determinant;
this.r3c2 = r3c2 / determinant;
this.r3c3 = r3c3 / determinant;
this.r2c1 = r2c1 * mutiplier;
this.r2c2 = r2c2 * mutiplier;
this.r2c3 = r2c3 * mutiplier;
this.r3c1 = r3c1 * mutiplier;
this.r3c2 = r3c2 * mutiplier;
this.r3c3 = r3c3 * mutiplier;
return true;
}
@ -386,17 +365,7 @@ namespace BGC
public static void Divide(in FP32Matrix3x3 dividend, float divisor, out FP32Matrix3x3 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r1c3 = dividend.r1c3 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
quotient.r2c3 = dividend.r2c3 / divisor;
quotient.r3c1 = dividend.r3c1 / divisor;
quotient.r3c2 = dividend.r3c2 / divisor;
quotient.r3c3 = dividend.r3c3 / divisor;
Multiply(dividend, 1.0f / divisor, out quotient);
}
public static void GetRightProduct(in FP32Matrix3x3 matrix, in FP32Vector3 vector, out FP32Vector3 result)

View file

@ -20,7 +20,7 @@ using System;
* Author: Andrey Pokidov
* Date: 11 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP32MatrixProduct
{

View file

@ -1,10 +1,10 @@
using System;
namespace BGC
namespace BasicGeometry
{
public struct FP32Quaternion
{
public float s0, x1, x2, x3;
public float s0 = 0.0f, x1 = 0.0f, x2 = 0.0f, x3 = 0.0f;
public FP32Quaternion(float s0, float x1, float x2, float x3)
{

View file

@ -4,7 +4,7 @@
* Date: 18 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP32Radians
{

View file

@ -21,11 +21,11 @@ using System;
* Date: 2 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Rotation3
{
private float angle;
private float angle = 0.0f;
private FP32Vector3 axis;

View file

@ -4,7 +4,7 @@
* Date: 18 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP32Turns
{

View file

@ -1,6 +1,6 @@
using System;
namespace BGC
namespace BasicGeometry
{
public class FP32Utility
{

View file

@ -21,14 +21,14 @@ using System;
* Date: 1 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Vector2
{
public static readonly FP32Vector2 ZERO = new FP32Vector2(0.0f, 0.0f);
public float x1;
public float x2;
public float x1 = 0.0f;
public float x2 = 0.0f;
public FP32Vector2(float x1, float x2)
{
@ -157,7 +157,7 @@ namespace BGC
difference.x2 = minuend.x2 - subtrahend.x2;
}
public static void Muliply(in FP32Vector2 multiplicand, float multiplier, out FP32Vector2 product)
public static void Multiply(in FP32Vector2 multiplicand, float multiplier, out FP32Vector2 product)
{
product.x1 = multiplicand.x1 * multiplier;
product.x2 = multiplicand.x2 * multiplier;
@ -165,8 +165,7 @@ namespace BGC
public static void Divide(in FP32Vector2 dividend, float divisor, out FP32Vector2 quotient)
{
quotient.x1 = dividend.x1 / divisor;
quotient.x2 = dividend.x2 / divisor;
Multiply(dividend, 1.0f / divisor, out quotient);
}
public static void GetMean2(in FP32Vector2 vector1, in FP32Vector2 vector2, out FP32Vector2 result)

View file

@ -21,15 +21,15 @@ using System;
* Date: 1 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Vector3
{
public static readonly FP32Vector3 ZERO = new FP32Vector3(0.0f, 0.0f, 0.0f);
public float x1;
public float x2;
public float x3;
public float x1 = 0.0f;
public float x2 = 0.0f;
public float x3 = 0.0f;
public FP32Vector3(float x1, float x2, float x3)
{
@ -172,7 +172,7 @@ namespace BGC
difference.x3 = minuend.x3 - subtrahend.x3;
}
public static void Muliply(in FP32Vector3 multiplicand, float multiplier, out FP32Vector3 product)
public static void Multiply(in FP32Vector3 multiplicand, float multiplier, out FP32Vector3 product)
{
product.x1 = multiplicand.x1 * multiplier;
product.x2 = multiplicand.x2 * multiplier;
@ -181,9 +181,7 @@ namespace BGC
public static void Divide(in FP32Vector3 dividend, float divisor, out FP32Vector3 quotient)
{
quotient.x1 = dividend.x1 / divisor;
quotient.x2 = dividend.x2 / divisor;
quotient.x3 = dividend.x3 / divisor;
Multiply(dividend, 1.0f / divisor, out quotient);
}
public static void GetMean2(in FP32Vector3 vector1, in FP32Vector3 vector2, out FP32Vector3 result)

View file

@ -19,22 +19,14 @@
* Date: 20 Oct 2024
*/
namespace BGC
namespace BasicGeometry
{
public struct FP32Versor
{
private float s0;
private float x1;
private float x2;
private float x3;
public FP32Versor()
{
this.s0 = 1.0f;
this.x1 = 0.0f;
this.x2 = 0.0f;
this.x3 = 0.0f;
}
private float s0 = 1.0f;
private float x1 = 0.0f;
private float x2 = 0.0f;
private float x3 = 0.0f;
public FP32Versor(float s0, float x1, float x2, float x3)
{
@ -178,12 +170,6 @@ namespace BGC
if (1.0f - FP32Utility.TWO_EPSYLON <= squareModule && squareModule <= 1.0f + FP32Utility.TWO_EPSYLON)
{
if (-1.0f + FP32Utility.EPSYLON < s0)
{
return;
}
this.Reset();
return;
}
@ -254,18 +240,18 @@ namespace BGC
private void Normalize(float squareModule)
{
if (squareModule <= FP32Utility.SQUARE_EPSYLON || (this.x1 * this.x1 + this.x2 * this.x2 + this.x3 * this.x3) <= FP32Utility.SQUARE_EPSYLON * squareModule)
if (squareModule <= FP32Utility.SQUARE_EPSYLON)
{
this.Reset();
return;
}
float module = MathF.Sqrt(squareModule);
float multiplier = MathF.Sqrt(1.0f / squareModule);
this.s0 /= module;
this.x1 /= module;
this.x2 /= module;
this.x3 /= module;
this.s0 *= multiplier;
this.x1 *= multiplier;
this.x2 *= multiplier;
this.x3 *= multiplier;
}
public static void Combine(in FP32Versor second, in FP32Versor first, out FP32Versor result)
@ -282,10 +268,12 @@ namespace BGC
result.x2 = x2;
result.x3 = x3;
if (squareModule < 1.0f - FP32Utility.TWO_EPSYLON || 1.0f + FP32Utility.TWO_EPSYLON < squareModule)
if (1.0f - FP32Utility.TWO_EPSYLON <= squareModule && squareModule <= 1.0f + FP32Utility.TWO_EPSYLON)
{
result.Normalize(squareModule);
return;
}
result.Normalize(squareModule);
}
public static void LoadIdle(out FP32Versor versor)
@ -307,12 +295,6 @@ namespace BGC
if (1.0f - FP32Utility.TWO_EPSYLON <= squareModule && squareModule <= 1.0f + FP32Utility.TWO_EPSYLON)
{
if (-1.0f + FP32Utility.EPSYLON < s0)
{
return;
}
versor.Reset();
return;
}

View file

@ -21,7 +21,7 @@ using System;
* Date: 1 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public static class FP64Angle
{

View file

@ -4,7 +4,7 @@
* Date: 18 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP64Degrees
{

View file

@ -21,29 +21,16 @@ using System;
* Date: 10 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP64Matrix2x2
{
public double r1c1, r1c2;
public double r2c1, r2c2;
public FP64Matrix2x2()
{
this.r1c1 = 0.0;
this.r1c2 = 0.0;
this.r2c1 = 0.0;
this.r2c2 = 0.0;
}
public double r1c1 = 0.0, r1c2 = 0.0;
public double r2c1 = 0.0, r2c2 = 0.0;
public FP64Matrix2x2(double d1, double d2)
{
this.r1c1 = d1;
this.r1c2 = 0.0;
this.r2c1 = 0.0;
this.r2c2 = d2;
}
@ -96,11 +83,13 @@ namespace BGC
double r2c1 = -this.r2c1;
double r2c2 = this.r1c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
double multiplier = 1.0 / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r1c1 = r1c1 * multiplier;
this.r1c2 = r1c2 * multiplier;
this.r2c1 = r2c1 * multiplier;
this.r2c2 = r2c2 * multiplier;
return true;
}
@ -181,11 +170,13 @@ namespace BGC
double r2c1 = -matrix.r2c1;
double r2c2 = matrix.r1c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
double multiplier = 1.0 / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r1c1 = r1c1 * multiplier;
this.r1c2 = r1c2 * multiplier;
this.r2c1 = r2c1 * multiplier;
this.r2c2 = r2c2 * multiplier;
return true;
}
@ -252,11 +243,7 @@ namespace BGC
public static void Divide(in FP64Matrix2x2 dividend, double divisor, out FP64Matrix2x2 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
Multiply(dividend, 1.0 / divisor, out quotient);
}
public static void GetRightProduct(in FP64Matrix2x2 matrix, in FP64Vector2 vector, out FP64Vector2 result)

View file

@ -20,25 +20,13 @@ using System;
* Author: Andrey Pokidov
* Date: 11 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public struct FP64Matrix2x3
{
public double r1c1, r1c2;
public double r2c1, r2c2;
public double r3c1, r3c2;
public FP64Matrix2x3()
{
this.r1c1 = 0.0;
this.r1c2 = 0.0;
this.r2c1 = 0.0;
this.r2c2 = 0.0;
this.r3c1 = 0.0;
this.r3c2 = 0.0;
}
public double r1c1 = 0.0, r1c2 = 0.0;
public double r2c1 = 0.0, r2c2 = 0.0;
public double r3c1 = 0.0, r3c2 = 0.0;
public FP64Matrix2x3(in FP64Matrix2x3 matrix)
{
@ -230,14 +218,7 @@ namespace BGC
public static void Divide(in FP64Matrix2x3 dividend, double divisor, out FP64Matrix2x3 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
quotient.r3c1 = dividend.r3c1 / divisor;
quotient.r3c2 = dividend.r3c2 / divisor;
Multiply(dividend, 1.0 / divisor, out quotient);
}
public static void GetRightProduct(in FP64Matrix2x3 matrix, in FP64Vector2 vector, out FP64Vector3 result)

View file

@ -20,23 +20,12 @@ using System;
* Author: Andrey Pokidov
* Date: 11 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public struct FP64Matrix3x2
{
public double r1c1, r1c2, r1c3;
public double r2c1, r2c2, r2c3;
public FP64Matrix3x2()
{
this.r1c1 = 0.0;
this.r1c2 = 0.0;
this.r1c3 = 0.0;
this.r2c1 = 0.0;
this.r2c2 = 0.0;
this.r2c3 = 0.0;
}
public double r1c1 = 0.0, r1c2 = 0.0, r1c3 = 0.0;
public double r2c1 = 0.0, r2c2 = 0.0, r2c3 = 0.0;
public FP64Matrix3x2(in FP64Matrix3x2 matrix)
{
@ -216,13 +205,7 @@ namespace BGC
public static void Divide(in FP64Matrix3x2 dividend, double divisor, out FP64Matrix3x2 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r1c3 = dividend.r1c3 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
quotient.r2c3 = dividend.r2c3 / divisor;
Multiply(dividend, 1.0 / divisor, out quotient);
}
public static void GetRightProduct(in FP64Matrix3x2 matrix, in FP64Vector3 vector, out FP64Vector2 result)

View file

@ -21,43 +21,18 @@ using System;
* Date: 10 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP64Matrix3x3
{
public double r1c1, r1c2, r1c3;
public double r2c1, r2c2, r2c3;
public double r3c1, r3c2, r3c3;
public FP64Matrix3x3()
{
this.r1c1 = 0.0;
this.r1c2 = 0.0;
this.r1c3 = 0.0;
this.r2c1 = 0.0;
this.r2c2 = 0.0;
this.r2c3 = 0.0;
this.r3c1 = 0.0;
this.r3c2 = 0.0;
this.r3c3 = 0.0;
}
public double r1c1 = 0.0, r1c2 = 0.0, r1c3 = 0.0;
public double r2c1 = 0.0, r2c2 = 0.0, r2c3 = 0.0;
public double r3c1 = 0.0, r3c2 = 0.0, r3c3 = 0.0;
public FP64Matrix3x3(double d1, double d2, double d3)
{
this.r1c1 = d1;
this.r1c2 = 0.0;
this.r1c3 = 0.0;
this.r2c1 = 0.0;
this.r2c2 = d2;
this.r2c3 = 0.0;
this.r3c1 = 0.0;
this.r3c2 = 0.0;
this.r3c3 = d3;
}
@ -131,17 +106,19 @@ namespace BGC
double r3c2 = this.r1c2 * this.r3c1 - this.r1c1 * this.r3c2;
double r3c3 = this.r1c1 * this.r2c2 - this.r1c2 * this.r2c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
this.r1c3 = r1c3 / determinant;
double mutiplier = 1.0 / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r2c3 = r2c3 / determinant;
this.r1c1 = r1c1 * mutiplier;
this.r1c2 = r1c2 * mutiplier;
this.r1c3 = r1c3 * mutiplier;
this.r3c1 = r3c1 / determinant;
this.r3c2 = r3c2 / determinant;
this.r3c3 = r3c3 / determinant;
this.r2c1 = r2c1 * mutiplier;
this.r2c2 = r2c2 * mutiplier;
this.r2c3 = r2c3 * mutiplier;
this.r3c1 = r3c1 * mutiplier;
this.r3c2 = r3c2 * mutiplier;
this.r3c3 = r3c3 * mutiplier;
return true;
}
@ -263,17 +240,19 @@ namespace BGC
double r3c2 = matrix.r1c2 * matrix.r3c1 - matrix.r1c1 * matrix.r3c2;
double r3c3 = matrix.r1c1 * matrix.r2c2 - matrix.r1c2 * matrix.r2c1;
this.r1c1 = r1c1 / determinant;
this.r1c2 = r1c2 / determinant;
this.r1c3 = r1c3 / determinant;
double mutiplier = 1.0 / determinant;
this.r2c1 = r2c1 / determinant;
this.r2c2 = r2c2 / determinant;
this.r2c3 = r2c3 / determinant;
this.r1c1 = r1c1 * mutiplier;
this.r1c2 = r1c2 * mutiplier;
this.r1c3 = r1c3 * mutiplier;
this.r3c1 = r3c1 / determinant;
this.r3c2 = r3c2 / determinant;
this.r3c3 = r3c3 / determinant;
this.r2c1 = r2c1 * mutiplier;
this.r2c2 = r2c2 * mutiplier;
this.r2c3 = r2c3 * mutiplier;
this.r3c1 = r3c1 * mutiplier;
this.r3c2 = r3c2 * mutiplier;
this.r3c3 = r3c3 * mutiplier;
return true;
}
@ -382,17 +361,7 @@ namespace BGC
public static void Divide(in FP64Matrix3x3 dividend, double divisor, out FP64Matrix3x3 quotient)
{
quotient.r1c1 = dividend.r1c1 / divisor;
quotient.r1c2 = dividend.r1c2 / divisor;
quotient.r1c3 = dividend.r1c3 / divisor;
quotient.r2c1 = dividend.r2c1 / divisor;
quotient.r2c2 = dividend.r2c2 / divisor;
quotient.r2c3 = dividend.r2c3 / divisor;
quotient.r3c1 = dividend.r3c1 / divisor;
quotient.r3c2 = dividend.r3c2 / divisor;
quotient.r3c3 = dividend.r3c3 / divisor;
Multiply(dividend, 1.0 / divisor, out quotient);
}
public static void GetRightProduct(in FP64Matrix3x3 matrix, in FP64Vector3 vector, out FP64Vector3 result)

View file

@ -20,7 +20,7 @@ using System;
* Author: Andrey Pokidov
* Date: 11 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP64MatrixProduct
{

View file

@ -1,11 +1,11 @@
using System;
using System.Numerics;
namespace BGC
namespace BasicGeometry
{
public struct FP64Quaternion
{
public double s0, x1, x2, x3;
public double s0 = 0.0, x1 = 0.0, x2 = 0.0, x3 = 0.0;
public FP64Quaternion(double s0, double x1, double x2, double x3)
{

View file

@ -4,7 +4,7 @@
* Date: 18 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP64Radians
{

View file

@ -4,7 +4,7 @@
* Date: 18 Nov 2024
*/
namespace BGC
namespace BasicGeometry
{
public class FP64Turns
{

View file

@ -1,6 +1,6 @@
using System;
namespace BGC
namespace BasicGeometry
{
public class FP64Utility
{

View file

@ -21,14 +21,14 @@ using System;
* Date: 1 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP64Vector2
{
public static readonly FP64Vector2 ZERO = new FP64Vector2(0.0, 0.0);
public double x1;
public double x2;
public double x1 = 0.0;
public double x2 = 0.0;
public FP64Vector2(double x1, double x2)
{
@ -157,7 +157,7 @@ namespace BGC
difference.x2 = minuend.x2 - subtrahend.x2;
}
public static void Muliply(in FP64Vector2 multiplicand, double multiplier, out FP64Vector2 product)
public static void Multiply(in FP64Vector2 multiplicand, double multiplier, out FP64Vector2 product)
{
product.x1 = multiplicand.x1 * multiplier;
product.x2 = multiplicand.x2 * multiplier;
@ -165,8 +165,7 @@ namespace BGC
public static void Divide(in FP64Vector2 dividend, double divisor, out FP64Vector2 quotient)
{
quotient.x1 = dividend.x1 / divisor;
quotient.x2 = dividend.x2 / divisor;
Multiply(dividend, 1.0 / divisor, out quotient);
}
public static void GetMean2(in FP64Vector2 vector1, in FP64Vector2 vector2, out FP64Vector2 result)

View file

@ -21,15 +21,15 @@ using System;
* Date: 1 Feb 2019
*/
namespace BGC
namespace BasicGeometry
{
public struct FP64Vector3
{
public static readonly FP64Vector3 ZERO = new FP64Vector3(0.0, 0.0, 0.0);
public double x1;
public double x2;
public double x3;
public double x1 = 0.0;
public double x2 = 0.0;
public double x3 = 0.0;
public FP64Vector3(double x1, double x2, double x3)
{
@ -172,7 +172,7 @@ namespace BGC
difference.x3 = minuend.x3 - subtrahend.x3;
}
public static void Muliply(in FP64Vector3 multiplicand, double multiplier, out FP64Vector3 product)
public static void Multiply(in FP64Vector3 multiplicand, double multiplier, out FP64Vector3 product)
{
product.x1 = multiplicand.x1 * multiplier;
product.x2 = multiplicand.x2 * multiplier;
@ -181,9 +181,7 @@ namespace BGC
public static void Divide(in FP64Vector3 dividend, double divisor, out FP64Vector3 quotient)
{
quotient.x1 = dividend.x1 / divisor;
quotient.x2 = dividend.x2 / divisor;
quotient.x3 = dividend.x3 / divisor;
Multiply(dividend, 1.0 / divisor, out quotient);
}
public static void GetMean2(in FP64Vector3 vector1, in FP64Vector3 vector2, out FP64Vector3 result)

View file

@ -20,22 +20,14 @@
* Date: 20 Oct 2024
*/
namespace BGC
namespace BasicGeometry
{
public struct FP64Versor
{
private double s0;
private double x1;
private double x2;
private double x3;
public FP64Versor()
{
this.s0 = 1.0;
this.x1 = 0.0;
this.x2 = 0.0;
this.x3 = 0.0;
}
private double s0 = 1.0;
private double x1 = 0.0;
private double x2 = 0.0;
private double x3 = 0.0;
public FP64Versor(double s0, double x1, double x2, double x3)
{
@ -182,12 +174,6 @@ namespace BGC
if (1.0 - FP64Utility.TWO_EPSYLON <= squareModule && squareModule <= 1.0 + FP64Utility.TWO_EPSYLON)
{
if (-1.0 + FP64Utility.EPSYLON < s0)
{
return;
}
this.Reset();
return;
}
@ -290,10 +276,12 @@ namespace BGC
result.x2 = x2;
result.x3 = x3;
if (squareModule < 1.0 - FP64Utility.TWO_EPSYLON || 1.0 + FP64Utility.TWO_EPSYLON < squareModule)
if (1.0 - FP64Utility.TWO_EPSYLON <= squareModule && squareModule <= 1.0 + FP64Utility.TWO_EPSYLON)
{
result.Normalize(squareModule);
return;
}
result.Normalize(squareModule);
}
public static void LoadIdle(out FP64Versor versor)
@ -315,12 +303,6 @@ namespace BGC
if (1.0 - FP64Utility.TWO_EPSYLON <= squareModule && squareModule <= 1.0 + FP64Utility.TWO_EPSYLON)
{
if (-1.0 + FP64Utility.EPSYLON < s0)
{
return;
}
versor.Reset();
return;
}

View file

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\BGC\BGC.csproj" />
<ProjectReference Include="..\BasicGeometry\BasicGeometry.csproj" />
</ItemGroup>
</Project>

View file

@ -2,7 +2,7 @@
using System;
using System.ComponentModel;
using System.Diagnostics;
using BGC;
using BasicGeometry;
public static class Program
{

View file

@ -12,7 +12,7 @@
<PackageReference Include="MSTest.TestAdapter" Version="2.2.7" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.7" />
<PackageReference Include="coverlet.collector" Version="3.1.0" />
<ProjectReference Include="..\BGC\BGC.csproj" />
<ProjectReference Include="..\BasicGeometry\BasicGeometry.csproj" />
</ItemGroup>
</Project>

View file

@ -3,9 +3,9 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.IO;
using BGC;
using BasicGeometry;
namespace BGCTest
namespace BasicGeometryTest
{
[TestClass]
public class FP32Vector2Test