2019-09-15 18:42:12 +00:00
---
title: "IShape2D"
date: 2019-09-15T11:06:50-07:00
weight: 5
---
An *IShape2D* is an interface that, when implemented, allows for spatial hashing and the computation of Minkowski Differences.
2019-12-02 06:43:33 +00:00
Your *IShape2D* implementations should be structs for memory efficiency purposes.
2019-09-15 18:42:12 +00:00
2019-12-31 22:37:49 +00:00
## Properties
##### **public AABB { get; }**
An axis-aligned bounding box for the shape. This is stored so we can efficiently transform the AABB when necessary.
2019-09-15 18:42:12 +00:00
## Methods
##### **Vector2 Support(Vector2 direction, Transform2D transform)**
A method which implements a support function for use with a Minkowski Difference.
The support function must, given a directional vector and a Transform2D, return the farthest possible vertex of the transformed shape in the given direction.
For example, the support function for Bonk's *Circle* implementation:
```cs
public Vector2 Support(Vector2 direction, Transform2D transform)
{
return Vector2.Transform(Vector2.Normalize(direction) * Radius, transform.TransformMatrix);
}
```
---
2019-12-31 22:39:54 +00:00
##### **AABB TransformedAABB(Transform2D transform)**
2019-09-15 18:42:12 +00:00
A method which returns the axis-aligned bounding box for the transformed shape.
For example, the AABB method for Bonk's *Circle* implementation:
```cs
2019-12-31 22:37:49 +00:00
public AABB TransformedAABB(Transform2D Transform2D)
2019-09-15 18:42:12 +00:00
{
2019-12-31 22:37:49 +00:00
return AABB.Transformed(AABB, transform2D);
2019-09-15 18:42:12 +00:00
}
2019-12-02 06:43:33 +00:00
```