optimize rectangle support function
							parent
							
								
									f9df547302
								
							
						
					
					
						commit
						9e7d16b0a9
					
				|  | @ -38,21 +38,36 @@ namespace MoonTools.Core.Bonk | |||
|             AABB = new AABB(minX, minY, maxX, maxY); | ||||
|         } | ||||
| 
 | ||||
|         private Vector2 Support(Vector2 direction) | ||||
|         { | ||||
|             if (direction.X >= 0 && direction.Y >= 0) | ||||
|             { | ||||
|                 return new Vector2(MaxX, MaxY); | ||||
|             } | ||||
|             else if (direction.X >= 0 && direction.Y < 0) | ||||
|             { | ||||
|                 return new Vector2(MaxX, MinY); | ||||
|             } | ||||
|             else if (direction.X < 0 && direction.Y >= 0) | ||||
|             { | ||||
|                 return new Vector2(MinX, MaxY); | ||||
|             } | ||||
|             else if (direction.X < 0 && direction.Y < 0) | ||||
|             { | ||||
|                 return new Vector2(MinX, MinY); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 throw new ArgumentException("Support vector direction cannot be zero."); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public Vector2 Support(Vector2 direction, Transform2D transform) | ||||
|         { | ||||
|             var maxDotProduct = float.NegativeInfinity; | ||||
|             var maxVertex = new Vector2(MinX, MinY); | ||||
|             foreach (var vertex in Vertices) | ||||
|             { | ||||
|                 var transformed = Vector2.Transform(vertex, transform.TransformMatrix); | ||||
|                 var dot = Vector2.Dot(transformed, direction); | ||||
|                 if (dot > maxDotProduct) | ||||
|                 { | ||||
|                     maxVertex = transformed; | ||||
|                     maxDotProduct = dot; | ||||
|                 } | ||||
|             } | ||||
|             return maxVertex; | ||||
|             Matrix4x4 inverseTransform; | ||||
|             Matrix4x4.Invert(transform.TransformMatrix, out inverseTransform); | ||||
|             var inverseDirection = Vector2.TransformNormal(direction, inverseTransform); | ||||
|             return Vector2.Transform(Support(inverseDirection), transform.TransformMatrix); | ||||
|         } | ||||
| 
 | ||||
|         public AABB TransformedAABB(Transform2D transform) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue