Skip to content

Commit f3c058b

Browse files
committed
Even more fixes from the tests.
1 parent bf41b90 commit f3c058b

6 files changed

Lines changed: 79 additions & 212 deletions

File tree

sources/Maths/Maths/Plane.Ops.cs

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -19,61 +19,19 @@ public static class Plane
1919
/// <returns>The Plane containing the three points.</returns>
2020
[MethodImpl((MethodImplOptions)768)]
2121
public static Plane<T> CreateFromVertices<T>(Vector3D<T> point1, Vector3D<T> point2, Vector3D<T> point3)
22-
where T : INumberBase<T>
22+
where T : IRootFunctions<T>
2323
{
24-
var a = point1;
25-
var b = point2;
26-
var c = point3;
27-
var ab = b - a;
28-
var ac = c - a;
29-
30-
var cross = Vector3D.Cross(ab, ac);
31-
Plane<T> p;
32-
p.Normal = cross;
33-
p.Distance = -((p.Normal.X * a.X) + (p.Normal.Y * a.Y) + (p.Normal.Z * a.Z));
34-
35-
return p;
36-
37-
/*if (Vector.IsHardwareAccelerated)
38-
{
39-
Vector3D<T> a = point2 - point1;
40-
Vector3D<T> b = point3 - point1;
24+
var a = point2 - point1;
25+
var b = point3 - point1;
4126

42-
// N = Cross(a, b)
43-
Vector3D<T> n = Vector3D.Cross(a, b);
44-
Vector3D<T> normal = Vector3D.Normalize(n);
27+
// N = Cross(a, b)
28+
var n = Vector3D.Cross(a, b);
29+
var normal = Vector3D.Normalize(n);
4530

46-
// D = - Dot(N, point1)
47-
T d = -Vector3D.Dot(normal, point1);
31+
// D = - Dot(N, point1)
32+
var d = -Vector3D.Dot(normal, point1);
4833

49-
return new Plane<T>(normal, d);
50-
}
51-
else
52-
{
53-
T ax = point2.X - point1.X;
54-
T ay = point2.Y - point1.Y;
55-
T az = point2.Z - point1.Z;
56-
57-
T bx = point3.X - point1.X;
58-
T by = point3.Y - point1.Y;
59-
T bz = point3.Z - point1.Z;
60-
61-
// N=Cross(a,b)
62-
T nx = (ay * bz) - (az * by);
63-
T ny = (az * bx) - (ax * bz);
64-
T nz = (ax * by) - (ay * bx);
65-
66-
// Normalize(N)
67-
T ls = (nx * nx) + (ny * ny) + (nz * nz);
68-
T invNorm = T.One / T.Sqrt(ls);
69-
70-
Vector3D<T> normal = new Vector3D<T>(
71-
nx * invNorm,
72-
ny * invNorm,
73-
nz * invNorm);
74-
75-
return new(normal, -((normal.X * point1.X) + (normal.Y * point1.Y) + (normal.Z * point1.Z)));
76-
}*/
34+
return new Plane<T>(normal, d);
7735
}
7836

7937
/// <summary>Calculates the dot product of a Plane and Vector4D.</summary>

sources/Maths/Maths/Vector2D.Ops.gen.cs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -880,12 +880,9 @@ public static Vector2D<TSelf> Tanh<TSelf>(Vector2D<TSelf> x)
880880
public static Vector2D<T> Transform<T>(Vector2D<T> vector, Quaternion<T> quaternion)
881881
where T : INumber<T>, IRootFunctions<T>, ITrigonometricFunctions<T>
882882
{
883-
var v = new Vector4D<T>(vector.X, vector.Y, T.Zero, T.One);
884-
885-
// Quaternion-vector rotation (optimized form)
886883
var x2 = quaternion.X + quaternion.X;
887884
var y2 = quaternion.Y + quaternion.Y;
888-
var z2 = quaternion.Z + quaternion.Z;
885+
var z2 = T.Zero;
889886

890887
var wx2 = quaternion.W * x2;
891888
var wy2 = quaternion.W * y2;
@@ -897,21 +894,18 @@ public static Vector2D<T> Transform<T>(Vector2D<T> vector, Quaternion<T> quatern
897894
var yz2 = quaternion.Y * z2;
898895
var zz2 = quaternion.Z * z2;
899896

900-
return new Vector2D<T>(
901-
v.X * (T.One - yy2 + zz2) + v.Y * (xy2 - wz2) + v.Z * (xz2 + wy2),
902-
v.Y * (T.One - yy2 + zz2) + v.X * (xy2 + wz2) + v.Z * (yz2 - wx2));
903-
}
897+
return new(
898+
(vector.X * (T.One - yy2 - zz2)) + (vector.Y * (xy2 - wz2)),
899+
(vector.X * (xy2 + wz2)) + (vector.Y * (T.One - xx2 - zz2)));
900+
}
904901

905902
/// <summary>Transforms the given vector by the specified Quaternion.</summary>
906903
public static Vector2D<T> TransformNormal<T>(Vector2D<T> vector, Quaternion<T> quaternion)
907904
where T : INumber<T>, IRootFunctions<T>, ITrigonometricFunctions<T>
908905
{
909-
var v = new Vector4D<T>(vector.X, vector.Y, T.Zero, T.Zero);
910-
911-
// Quaternion-vector rotation (optimized form)
912906
var x2 = quaternion.X + quaternion.X;
913907
var y2 = quaternion.Y + quaternion.Y;
914-
var z2 = quaternion.Z + quaternion.Z;
908+
var z2 = T.Zero;
915909

916910
var wx2 = quaternion.W * x2;
917911
var wy2 = quaternion.W * y2;
@@ -923,10 +917,10 @@ public static Vector2D<T> TransformNormal<T>(Vector2D<T> vector, Quaternion<T> q
923917
var yz2 = quaternion.Y * z2;
924918
var zz2 = quaternion.Z * z2;
925919

926-
return new Vector2D<T>(
927-
v.X * (T.One - yy2 + zz2) + v.Y * (xy2 - wz2) + v.Z * (xz2 + wy2),
928-
v.Y * (T.One - yy2 + zz2) + v.X * (xy2 + wz2) + v.Z * (yz2 - wx2));
929-
}
920+
return new(
921+
(vector.X * (T.One - yy2 - zz2)) + (vector.Y * (xy2 - wz2)),
922+
(vector.X * (xy2 + wz2)) + (vector.Y * (T.One - xx2 - zz2)));
923+
}
930924

931925
/// <summary>Transforms the given vector by the specified transformation Matrix.</summary>
932926
public static Vector2D<T> Transform<T>(Vector2D<T> vector, Matrix2X2<T> matrix)

sources/Maths/Maths/Vector3D.Ops.gen.cs

Lines changed: 22 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -860,12 +860,9 @@ public static Vector3D<TSelf> Tanh<TSelf>(Vector3D<TSelf> x)
860860
public static Vector3D<T> Transform<T>(Vector2D<T> vector, Quaternion<T> quaternion)
861861
where T : INumber<T>, IRootFunctions<T>, ITrigonometricFunctions<T>
862862
{
863-
var v = new Vector4D<T>(vector.X, vector.Y, T.Zero, T.One);
864-
865-
// Quaternion-vector rotation (optimized form)
866863
var x2 = quaternion.X + quaternion.X;
867864
var y2 = quaternion.Y + quaternion.Y;
868-
var z2 = quaternion.Z + quaternion.Z;
865+
var z2 = T.Zero;
869866

870867
var wx2 = quaternion.W * x2;
871868
var wy2 = quaternion.W * y2;
@@ -877,19 +874,16 @@ public static Vector3D<T> Transform<T>(Vector2D<T> vector, Quaternion<T> quatern
877874
var yz2 = quaternion.Y * z2;
878875
var zz2 = quaternion.Z * z2;
879876

880-
return new Vector3D<T>(
881-
v.X * (T.One - yy2 + zz2) + v.Y * (xy2 - wz2) + v.Z * (xz2 + wy2),
882-
v.Y * (T.One - yy2 + zz2) + v.X * (xy2 + wz2) + v.Z * (yz2 - wx2),
883-
v.Z * (T.One - yy2 + zz2) + v.X * (xz2 - wy2) + v.Y * (yz2 + wx2));
884-
}
877+
return new(
878+
(vector.X * (T.One - yy2 - zz2)) + (vector.Y * (xy2 - wz2)),
879+
(vector.X * (xy2 + wz2)) + (vector.Y * (T.One - xx2 - zz2)),
880+
(vector.X * (xz2 - wy2)) + (vector.Y * (yz2 + wx2)));
881+
}
885882

886883
/// <summary>Transforms the given vector by the specified Quaternion.</summary>
887884
public static Vector3D<T> Transform<T>(Vector3D<T> vector, Quaternion<T> quaternion)
888885
where T : INumber<T>, IRootFunctions<T>, ITrigonometricFunctions<T>
889886
{
890-
var v = new Vector4D<T>(vector.X, vector.Y, vector.Z, T.One);
891-
892-
// Quaternion-vector rotation (optimized form)
893887
var x2 = quaternion.X + quaternion.X;
894888
var y2 = quaternion.Y + quaternion.Y;
895889
var z2 = quaternion.Z + quaternion.Z;
@@ -904,22 +898,19 @@ public static Vector3D<T> Transform<T>(Vector3D<T> vector, Quaternion<T> quatern
904898
var yz2 = quaternion.Y * z2;
905899
var zz2 = quaternion.Z * z2;
906900

907-
return new Vector3D<T>(
908-
v.X * (T.One - yy2 + zz2) + v.Y * (xy2 - wz2) + v.Z * (xz2 + wy2),
909-
v.Y * (T.One - yy2 + zz2) + v.X * (xy2 + wz2) + v.Z * (yz2 - wx2),
910-
v.Z * (T.One - yy2 + zz2) + v.X * (xz2 - wy2) + v.Y * (yz2 + wx2));
911-
}
901+
return new(
902+
(vector.X * (T.One - yy2 - zz2)) + (vector.Y * (xy2 - wz2)) + (vector.Z * (xz2 + wy2)),
903+
(vector.X * (xy2 + wz2)) + (vector.Y * (T.One - xx2 - zz2)) + (vector.Z * (yz2 - wx2)),
904+
(vector.X * (xz2 - wy2)) + (vector.Y * (yz2 + wx2)) + (vector.Z * (T.One - xx2 - yy2)));
905+
}
912906

913907
/// <summary>Transforms the given vector by the specified Quaternion.</summary>
914908
public static Vector3D<T> TransformNormal<T>(Vector2D<T> vector, Quaternion<T> quaternion)
915909
where T : INumber<T>, IRootFunctions<T>, ITrigonometricFunctions<T>
916910
{
917-
var v = new Vector4D<T>(vector.X, vector.Y, T.Zero, T.Zero);
918-
919-
// Quaternion-vector rotation (optimized form)
920911
var x2 = quaternion.X + quaternion.X;
921912
var y2 = quaternion.Y + quaternion.Y;
922-
var z2 = quaternion.Z + quaternion.Z;
913+
var z2 = T.Zero;
923914

924915
var wx2 = quaternion.W * x2;
925916
var wy2 = quaternion.W * y2;
@@ -931,19 +922,16 @@ public static Vector3D<T> TransformNormal<T>(Vector2D<T> vector, Quaternion<T> q
931922
var yz2 = quaternion.Y * z2;
932923
var zz2 = quaternion.Z * z2;
933924

934-
return new Vector3D<T>(
935-
v.X * (T.One - yy2 + zz2) + v.Y * (xy2 - wz2) + v.Z * (xz2 + wy2),
936-
v.Y * (T.One - yy2 + zz2) + v.X * (xy2 + wz2) + v.Z * (yz2 - wx2),
937-
v.Z * (T.One - yy2 + zz2) + v.X * (xz2 - wy2) + v.Y * (yz2 + wx2));
938-
}
925+
return new(
926+
(vector.X * (T.One - yy2 - zz2)) + (vector.Y * (xy2 - wz2)),
927+
(vector.X * (xy2 + wz2)) + (vector.Y * (T.One - xx2 - zz2)),
928+
(vector.X * (xz2 - wy2)) + (vector.Y * (yz2 + wx2)));
929+
}
939930

940931
/// <summary>Transforms the given vector by the specified Quaternion.</summary>
941932
public static Vector3D<T> TransformNormal<T>(Vector3D<T> vector, Quaternion<T> quaternion)
942933
where T : INumber<T>, IRootFunctions<T>, ITrigonometricFunctions<T>
943934
{
944-
var v = new Vector4D<T>(vector.X, vector.Y, vector.Z, T.Zero);
945-
946-
// Quaternion-vector rotation (optimized form)
947935
var x2 = quaternion.X + quaternion.X;
948936
var y2 = quaternion.Y + quaternion.Y;
949937
var z2 = quaternion.Z + quaternion.Z;
@@ -958,11 +946,11 @@ public static Vector3D<T> TransformNormal<T>(Vector3D<T> vector, Quaternion<T> q
958946
var yz2 = quaternion.Y * z2;
959947
var zz2 = quaternion.Z * z2;
960948

961-
return new Vector3D<T>(
962-
v.X * (T.One - yy2 + zz2) + v.Y * (xy2 - wz2) + v.Z * (xz2 + wy2),
963-
v.Y * (T.One - yy2 + zz2) + v.X * (xy2 + wz2) + v.Z * (yz2 - wx2),
964-
v.Z * (T.One - yy2 + zz2) + v.X * (xz2 - wy2) + v.Y * (yz2 + wx2));
965-
}
949+
return new(
950+
(vector.X * (T.One - yy2 - zz2)) + (vector.Y * (xy2 - wz2)) + (vector.Z * (xz2 + wy2)),
951+
(vector.X * (xy2 + wz2)) + (vector.Y * (T.One - xx2 - zz2)) + (vector.Z * (yz2 - wx2)),
952+
(vector.X * (xz2 - wy2)) + (vector.Y * (yz2 + wx2)) + (vector.Z * (T.One - xx2 - yy2)));
953+
}
966954

967955
/// <summary>Transforms the given vector by the specified transformation Matrix.</summary>
968956
public static Vector3D<T> Transform<T>(Vector2D<T> vector, Matrix2X3<T> matrix)

0 commit comments

Comments
 (0)