forked from MoonsideGames/MoonTools.Bonk
optimize simplex equality
parent
2dca5f716c
commit
d553c2e213
|
@ -1,5 +1,4 @@
|
||||||
using System.Linq;
|
using System.Collections.Generic;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using MoonTools.Core.Structs;
|
using MoonTools.Core.Structs;
|
||||||
using System;
|
using System;
|
||||||
|
@ -80,11 +79,15 @@ namespace MoonTools.Core.Bonk
|
||||||
|
|
||||||
public bool Equals(Simplex2D other)
|
public bool Equals(Simplex2D other)
|
||||||
{
|
{
|
||||||
var q = from a in Vertices
|
if (Count != other.Count) { return false; }
|
||||||
join b in other.Vertices on a equals b
|
|
||||||
select a;
|
|
||||||
|
|
||||||
return Count == other.Count && q.Count() == Count;
|
return
|
||||||
|
(A == other.A && B == other.B && C == other.C) ||
|
||||||
|
(A == other.A && B == other.C && C == other.B) ||
|
||||||
|
(A == other.B && B == other.A && C == other.C) ||
|
||||||
|
(A == other.B && B == other.C && C == other.A) ||
|
||||||
|
(A == other.C && B == other.A && C == other.B) ||
|
||||||
|
(A == other.C && B == other.B && C == other.A);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
|
|
|
@ -455,14 +455,26 @@ namespace Tests
|
||||||
public void TwoSimplexEquals()
|
public void TwoSimplexEquals()
|
||||||
{
|
{
|
||||||
var simplexA = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX);
|
var simplexA = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX);
|
||||||
|
|
||||||
var simplexB = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX);
|
var simplexB = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX);
|
||||||
|
|
||||||
simplexA.Equals(simplexB).Should().BeTrue();
|
simplexA.Equals(simplexB).Should().BeTrue();
|
||||||
|
|
||||||
var simplexC = new Simplex2D(Vector2.One, Vector2.Zero, Vector2.UnitX);
|
var simplexC = new Simplex2D(Vector2.Zero, Vector2.One, Vector2.UnitX);
|
||||||
var simplexD = new Simplex2D(Vector2.Zero, Vector2.One, Vector2.UnitX);
|
|
||||||
|
|
||||||
simplexC.Equals(simplexD).Should().BeTrue();
|
simplexA.Equals(simplexC).Should().BeTrue();
|
||||||
|
|
||||||
|
var simplexD = new Simplex2D(Vector2.UnitX, Vector2.Zero, Vector2.One);
|
||||||
|
|
||||||
|
simplexA.Equals(simplexD).Should().BeTrue();
|
||||||
|
|
||||||
|
var simplexE = new Simplex2D(Vector2.One, Vector2.UnitX, Vector2.Zero);
|
||||||
|
|
||||||
|
simplexA.Equals(simplexE).Should().BeTrue();
|
||||||
|
|
||||||
|
var simplexF = new Simplex2D(Vector2.Zero, Vector2.UnitX, Vector2.One);
|
||||||
|
|
||||||
|
simplexA.Equals(simplexF).Should().BeTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
|
|
Loading…
Reference in New Issue