Добавление операции Shorten для версоров / Adding of shortening operation for versors

This commit is contained in:
Andrey Pokidov 2024-12-21 21:38:45 +07:00
parent df827ffe0e
commit 233c027d46
2 changed files with 82 additions and 26 deletions

View file

@ -82,6 +82,16 @@ namespace BasicGeometry
this.x3 = 0.0f; this.x3 = 0.0f;
} }
public void Shorten()
{
if (this.s0 < 0.0f) {
this.s0 = -this.s0;
this.x1 = -this.x1;
this.x2 = -this.x2;
this.x3 = -this.x3;
}
}
public void Invert() public void Invert()
{ {
this.x1 = -this.x1; this.x1 = -this.x1;
@ -186,10 +196,11 @@ namespace BasicGeometry
public void SetValues(in FP64Versor versor) public void SetValues(in FP64Versor versor)
{ {
this.s0 = (float) versor.GetScalar(); this.SetValues(
this.x1 = (float) versor.GetX1(); (float) versor.GetScalar(),
this.x2 = (float) versor.GetX2(); (float) versor.GetX1(),
this.x3 = (float) versor.GetX3(); (float) versor.GetX2(),
(float) versor.GetX3());
} }
public void SetInverted(in FP32Versor versor) public void SetInverted(in FP32Versor versor)
@ -202,10 +213,35 @@ namespace BasicGeometry
public void SetInverted(in FP64Versor versor) public void SetInverted(in FP64Versor versor)
{ {
this.s0 = (float) versor.GetScalar(); this.SetValues(
this.x1 = (float) -versor.GetX1(); (float)versor.GetScalar(),
this.x2 = (float) -versor.GetX2(); (float)-versor.GetX1(),
this.x3 = (float) -versor.GetX3(); (float)-versor.GetX2(),
(float)-versor.GetX3());
}
public void SetShortened(in FP32Versor versor)
{
if (versor.s0 < 0.0f)
{
this.s0 = -versor.s0;
this.x1 = -versor.x1;
this.x2 = -versor.x2;
this.x3 = -versor.x3;
}
else
{
this.s0 = versor.s0;
this.x1 = versor.x1;
this.x2 = versor.x2;
this.x3 = versor.x3;
}
}
public void SetShortened(in FP64Versor versor)
{
this.SetValues(versor);
this.Shorten();
} }
public readonly void Turn(in FP32Vector3 vector, out FP32Vector3 result) public readonly void Turn(in FP32Vector3 vector, out FP32Vector3 result)

View file

@ -44,12 +44,7 @@ namespace BasicGeometry
public FP64Versor(in FP32Versor versor) public FP64Versor(in FP32Versor versor)
{ {
LoadValues( LoadValues(versor.GetScalar(), versor.GetX1(), versor.GetX2(), versor.GetX3(), out this);
versor.GetScalar(),
versor.GetX1(),
versor.GetX2(),
versor.GetX3(),
out this);
} }
public readonly double GetScalar() public readonly double GetScalar()
@ -85,6 +80,17 @@ namespace BasicGeometry
this.x3 = 0.0; this.x3 = 0.0;
} }
public void Shorten()
{
if (this.s0 < 0.0)
{
this.s0 = -this.s0;
this.x1 = -this.x1;
this.x2 = -this.x2;
this.x3 = -this.x3;
}
}
public void Invert() public void Invert()
{ {
this.x1 = -this.x1; this.x1 = -this.x1;
@ -190,12 +196,31 @@ namespace BasicGeometry
public void SetValues(in FP32Versor versor) public void SetValues(in FP32Versor versor)
{ {
LoadValues( this.SetValues(versor.GetScalar(), versor.GetX1(), versor.GetX2(), versor.GetX3());
versor.GetScalar(), }
versor.GetX1(),
versor.GetX2(), public void SetShortened(in FP64Versor versor)
versor.GetX3(), {
out this); if (versor.s0 < 0.0)
{
this.s0 = -versor.s0;
this.x1 = -versor.x1;
this.x2 = -versor.x2;
this.x3 = -versor.x3;
}
else
{
this.s0 = versor.s0;
this.x1 = versor.x1;
this.x2 = versor.x2;
this.x3 = versor.x3;
}
}
public void SetShortened(in FP32Versor versor)
{
this.SetValues(versor);
this.Shorten();
} }
public void SetInverted(in FP64Versor versor) public void SetInverted(in FP64Versor versor)
@ -208,12 +233,7 @@ namespace BasicGeometry
public void SetInverted(in FP32Versor versor) public void SetInverted(in FP32Versor versor)
{ {
LoadValues( this.SetValues(versor.GetScalar(), -versor.GetX1(), -versor.GetX2(), -versor.GetX3());
versor.GetScalar(),
versor.GetX1(),
versor.GetX2(),
versor.GetX3(),
out this);
} }
public readonly void Turn(in FP64Vector3 vector, out FP64Vector3 result) public readonly void Turn(in FP64Vector3 vector, out FP64Vector3 result)