restructure files
							parent
							
								
									20872021fc
								
							
						
					
					
						commit
						a53677ba02
					
				|  | @ -2,90 +2,10 @@ | |||
| using MoonTools.Core.Structs; | ||||
| using System; | ||||
| using MoonTools.Core.Bonk.Extensions; | ||||
| using System.Collections.Generic; | ||||
| 
 | ||||
| namespace MoonTools.Core.Bonk | ||||
| { | ||||
|     public struct MinkowskiDifference : IEquatable<MinkowskiDifference> | ||||
|     { | ||||
|         private IShape2D shapeA; | ||||
|         private Transform2D transformA; | ||||
|         private IShape2D shapeB; | ||||
|         private Transform2D transformB; | ||||
| 
 | ||||
|         public MinkowskiDifference(IShape2D shapeA, Transform2D transformA, IShape2D shapeB, Transform2D transformB) | ||||
|         { | ||||
|             this.shapeA = shapeA; | ||||
|             this.transformA = transformA; | ||||
|             this.shapeB = shapeB; | ||||
|             this.transformB = transformB; | ||||
|         } | ||||
| 
 | ||||
|         public bool Equals(MinkowskiDifference other) | ||||
|         { | ||||
|             return | ||||
|                 shapeA == other.shapeA && | ||||
|                 transformA.Equals(other.transformA) && | ||||
|                 shapeB == other.shapeB && | ||||
|                 transformB.Equals(other.transformB); | ||||
|         } | ||||
| 
 | ||||
|         public Vector2 Support(Vector2 direction) | ||||
|         { | ||||
|             return shapeA.Support(direction, transformA) - shapeB.Support(-direction, transformB); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public struct Simplex : IShape2D | ||||
|     { | ||||
|         MinkowskiDifference minkowskiDifference; | ||||
|         Vector2 directionA; | ||||
|         Vector2 directionB; | ||||
| 
 | ||||
|         public Simplex(MinkowskiDifference minkowskiDifference, Vector2 directionA, Vector2 directionB) | ||||
|         { | ||||
|             this.minkowskiDifference = minkowskiDifference; | ||||
|             this.directionA = directionA; | ||||
|             this.directionB = directionB; | ||||
|         } | ||||
| 
 | ||||
|         public IEnumerable<Position2D> Vertices | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 yield return (Position2D)Support(directionA); | ||||
|                 yield return (Position2D)Support(directionB); | ||||
|                 yield return (Position2D)Support(-(directionB - directionA).Perpendicular()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public AABB AABB(Transform2D transform) | ||||
|         { | ||||
|             return Bonk.AABB.FromTransformedVertices(Vertices, transform); | ||||
|         } | ||||
| 
 | ||||
|         public bool Equals(IShape2D other) | ||||
|         { | ||||
|             if (other is Simplex polytope) | ||||
|             { | ||||
|                 return minkowskiDifference.Equals(polytope.minkowskiDifference) && | ||||
|                     directionA == polytope.directionA && | ||||
|                     directionB == polytope.directionB; | ||||
|             } | ||||
| 
 | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         public Vector2 Support(Vector2 direction) | ||||
|         { | ||||
|             return minkowskiDifference.Support(direction); | ||||
|         } | ||||
| 
 | ||||
|         public Vector2 Support(Vector2 direction, Transform2D transform) | ||||
|         { | ||||
|             return Vector2.Transform(Support(direction), transform.TransformMatrix); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public static class GJK2D | ||||
|     { | ||||
|  |  | |||
|  | @ -0,0 +1,36 @@ | |||
| using System; | ||||
| using Microsoft.Xna.Framework; | ||||
| using MoonTools.Core.Structs; | ||||
| 
 | ||||
| namespace MoonTools.Core.Bonk | ||||
| { | ||||
|     public struct MinkowskiDifference : IEquatable<MinkowskiDifference> | ||||
|     { | ||||
|         private IShape2D shapeA; | ||||
|         private Transform2D transformA; | ||||
|         private IShape2D shapeB; | ||||
|         private Transform2D transformB; | ||||
| 
 | ||||
|         public MinkowskiDifference(IShape2D shapeA, Transform2D transformA, IShape2D shapeB, Transform2D transformB) | ||||
|         { | ||||
|             this.shapeA = shapeA; | ||||
|             this.transformA = transformA; | ||||
|             this.shapeB = shapeB; | ||||
|             this.transformB = transformB; | ||||
|         } | ||||
| 
 | ||||
|         public bool Equals(MinkowskiDifference other) | ||||
|         { | ||||
|             return | ||||
|                 shapeA == other.shapeA && | ||||
|                 transformA.Equals(other.transformA) && | ||||
|                 shapeB == other.shapeB && | ||||
|                 transformB.Equals(other.transformB); | ||||
|         } | ||||
| 
 | ||||
|         public Vector2 Support(Vector2 direction) | ||||
|         { | ||||
|             return shapeA.Support(direction, transformA) - shapeB.Support(-direction, transformB); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,58 @@ | |||
| using System.Collections.Generic; | ||||
| using Microsoft.Xna.Framework; | ||||
| using MoonTools.Core.Structs; | ||||
| using MoonTools.Core.Bonk.Extensions; | ||||
| 
 | ||||
| namespace MoonTools.Core.Bonk | ||||
| { | ||||
|     public struct Simplex : IShape2D | ||||
|     { | ||||
|         MinkowskiDifference minkowskiDifference; | ||||
|         Vector2 directionA; | ||||
|         Vector2 directionB; | ||||
| 
 | ||||
|         public Simplex(MinkowskiDifference minkowskiDifference, Vector2 directionA, Vector2 directionB) | ||||
|         { | ||||
|             this.minkowskiDifference = minkowskiDifference; | ||||
|             this.directionA = directionA; | ||||
|             this.directionB = directionB; | ||||
|         } | ||||
| 
 | ||||
|         public IEnumerable<Position2D> Vertices | ||||
|         { | ||||
|             get | ||||
|             { | ||||
|                 yield return (Position2D)Support(directionA); | ||||
|                 yield return (Position2D)Support(directionB); | ||||
|                 yield return (Position2D)Support(-(directionB - directionA).Perpendicular()); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public AABB AABB(Transform2D transform) | ||||
|         { | ||||
|             return Bonk.AABB.FromTransformedVertices(Vertices, transform); | ||||
|         } | ||||
| 
 | ||||
|         public bool Equals(IShape2D other) | ||||
|         { | ||||
|             if (other is Simplex polytope) | ||||
|             { | ||||
|                 return minkowskiDifference.Equals(polytope.minkowskiDifference) && | ||||
|                     directionA == polytope.directionA && | ||||
|                     directionB == polytope.directionB; | ||||
|             } | ||||
| 
 | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         public Vector2 Support(Vector2 direction) | ||||
|         { | ||||
|             return minkowskiDifference.Support(direction); | ||||
|         } | ||||
| 
 | ||||
|         public Vector2 Support(Vector2 direction, Transform2D transform) | ||||
|         { | ||||
|             return Vector2.Transform(Support(direction), transform.TransformMatrix); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | @ -2,15 +2,15 @@ using Microsoft.Xna.Framework; | |||
| 
 | ||||
| namespace MoonTools.Core.Bonk.Extensions | ||||
| { | ||||
|     public static class Vector2Extensions | ||||
|     internal static class Vector2Extensions | ||||
|     { | ||||
|         public static Vector2 Cross(this Vector2 a, Vector2 b) | ||||
|         internal static Vector2 Cross(this Vector2 a, Vector2 b) | ||||
|         { | ||||
|             var vec3 = Vector3.Cross(new Vector3(a.X, a.Y, 0), new Vector3(b.X, b.Y, 0)); | ||||
|             return new Vector2(vec3.X, vec3.Y); | ||||
|         } | ||||
| 
 | ||||
|         public static Vector2 Perpendicular(this Vector2 v) | ||||
|         internal static Vector2 Perpendicular(this Vector2 v) | ||||
|         { | ||||
|             return new Vector2(v.Y, -v.X); | ||||
|         } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue