Daily update on 20250316-095544 by Nitload Youmu. Additional Message : Linear math inmprovement

Signed-off-by: Nitload <YoumuLiu_NSI@whv0t.onmicrosoft.com>
This commit is contained in:
Nitload
2025-03-16 09:55:44 +08:00
parent 753cc167bc
commit a5aef8506d
58 changed files with 3162 additions and 506 deletions
@@ -47,14 +47,14 @@ namespace StgSharp.Geometries
internal Matrix32 axis;
/// <summary>
/// The origin of this coordinate.
/// The _origin of this coordinate.
/// </summary>
public Vec3 origin;
public PartialPlainCoordinate(
Vec3 origin,
Vec3 horiziontial,
Vec3 vertical )
Vec3 origin,
Vec3 horiziontial,
Vec3 vertical )
{
this.origin = origin;
axis = new Matrix32();
@@ -38,30 +38,22 @@ namespace StgSharp.Geometries
{
internal readonly float d = -1;
internal Vec3 origin;
internal Vec3 _origin;
internal Vec3 plainParameter;
internal Vec3 vec1;
internal Vec3 vec2;
internal Plain( Vector4 origin, Vector4 p1, Vector4 p2 )
{
this.origin = new Vec3( origin );
vec1 = new Vec3( p1 - origin );
vec2 = new Vec3( p2 - origin );
}
public Plain( Vec3 o, Vec3 v1, Vec3 v2 )
{
this.origin = o;
this.vec1 = v1 - ( v2 * ( v1.Y / v2.Y ) ); //计算平面在xz平面上的方向投影
this.vec2 = v2 - ( vec1 * ( v2.X / v1.X ) ); //计算平面在yz平面上的方向投影
this._origin = o;
this.vec1 = v1 - ( v2 * ( v1.Y / v2.Y ) ); //xz
this.vec2 = v2 - ( vec1 * ( v2.X / v1.X ) ); //yz
//|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z;
plainParameter.Z = origin.Z - ( vec1.Z * ( origin.X / vec1.X ) ) - ( vec2.Z * ( origin.Y / vec2.Y ) );
//|_origin|-k1*|vec1|-k2*|vec2| --> plainParameter.Z;
plainParameter.Z = _origin.Z - ( vec1.Z * ( _origin.X / vec1.X ) ) - ( vec2.Z * ( _origin.Y / vec2.Y ) );
//根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y
//plainParameter.Z -> plainParameter.X, plainParameter.Y
plainParameter.X = vec1.X * ( vec1.Z / plainParameter.Z );
plainParameter.Y = vec2.Y * ( vec2.Z / plainParameter.Z );
@@ -77,13 +69,13 @@ namespace StgSharp.Geometries
Vec3 v2 = p3.Coord - origin;
vec1 = v1 - ( v2 * ( v1.Y / v2.Y ) ); //计算平面在xz平面上的方向投影
vec2 = v2 - ( vec1 * ( v2.X / v1.X ) ); //计算平面在yz平面上的方向投影
vec1 = v1 - ( v2 * ( v1.Y / v2.Y ) ); //xz
vec2 = v2 - ( vec1 * ( v2.X / v1.X ) ); //yz
//|origin|-k1*|vec1|-k2*|vec2|计算plainParameter.Z;
//|_origin|-k1*|vec1|-k2*|vec2| --> plainParameter.Z;
plainParameter.Z = origin.Z - ( vec1.Z * ( origin.X / vec1.X ) ) - ( vec2.Z * ( origin.Y / vec2.Y ) );
//根据plainParameter.Z和对应的方向矢量计算plainParameter.X和plainParameter.Y
//plainParameter.Z --> plainParameter.X, plainParameter.Y
plainParameter.X = vec1.X * ( vec1.Z / plainParameter.Z );
plainParameter.Y = vec2.Y * ( vec2.Z / plainParameter.Z );
@@ -48,24 +48,24 @@ namespace StgSharp.Geometries
}
public Polygon6(
PlainCoordinate coordination,
Vec2 vert0,
Vec2 vert1,
Vec2 vert2,
Vec2 vert3,
Vec2 vert4,
Vec2 vert5,
Vec2 vert6 )
PlainCoordinate coordination,
Vec2 vert0,
Vec2 vert1,
Vec2 vert2,
Vec2 vert3,
Vec2 vert4,
Vec2 vert5,
Vec2 vert6 )
: base( coordination )
{
vertexMat = new Vec4[6];
vertexMat[ 0 ].vec = vert0.vec;
vertexMat[ 1 ].vec = vert1.vec;
vertexMat[ 2 ].vec = vert2.vec;
vertexMat[ 3 ].vec = vert3.vec;
vertexMat[ 4 ].vec = vert4.vec;
vertexMat[ 5 ].vec = vert5.vec;
vertexMat[ 6 ].vec = vert6.vec;
vertexMat[ 0 ].reg = vert0.reg;
vertexMat[ 1 ].reg = vert1.reg;
vertexMat[ 2 ].reg = vert2.reg;
vertexMat[ 3 ].reg = vert3.reg;
vertexMat[ 4 ].reg = vert4.reg;
vertexMat[ 5 ].reg = vert5.reg;
vertexMat[ 6 ].reg = vert6.reg;
}
public override ReadOnlySpan<int> VertexIndices => Indices;