- Object
-
- AbstractShape
-
- Capsule
-
- All Implemented Interfaces:
DataContainer
,Convex
,Rotatable
,Shape
,Transformable
,Translatable
public class Capsule extends AbstractShape implements Convex, Shape, Transformable, DataContainer
Implementation of a CapsuleConvex
Shape
.A capsule can be described as a rectangle with two half circle caps on both ends. A capsule is created by specifying the bounding rectangle of the entire
Shape
.If the height is larger than the width the caps will be on the top and bottom of the shape. Otherwise the caps are on the left and right ends of the shape.
A capsule's width and height must be larger than zero and cannot be equal. A
Circle
should be used instead of an equal width/height capsule for both performance and stability.- Since:
- 3.1.5
- Version:
- 3.4.0
- Author:
- William Bittle
-
-
Constructor Summary
Constructors Constructor Description Capsule(double width, double height)
Minimal constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
computeAABB(Transform transform, AABB aabb)
boolean
contains(Vector2 point, Transform transform)
Returns true if the given point is inside thisShape
.Mass
createMass(double density)
Vector2[]
getAxes(Vector2[] foci, Transform transform)
Returns an array of separating axes to test for thisShape
.double
getCapRadius()
Returns the end cap radius.Feature
getFarthestFeature(Vector2 vector, Transform transform)
Returns theFeature
farthest in the direction of the given vector.Vector2
getFarthestPoint(Vector2 vector, Transform transform)
Returns the point farthest in the direction of the given vector.Vector2[]
getFoci(Transform transform)
Returns an array of world space foci points for circular curved edges.double
getLength()
Returns the length of the capsule.double
getRadius(Vector2 center)
Returns the radius of the shape if the given point was the center for this shape.Rotation
getRotation()
double
getRotationAngle()
Returns the rotation about the local center in radians in the range [-π, π].Interval
project(Vector2 vector, Transform transform)
void
rotate(Rotation rotation, double x, double y)
Rotates the object about the given point.String
toString()
void
translate(double x, double y)
Translates the object the given amounts in the respective directions.-
Methods inherited from class AbstractShape
computeAABB, contains, createAABB, createAABB, getCenter, getRadius, getUserData, project, rotate, rotate, rotate, rotate, rotate, rotateAboutCenter, setUserData, translate
-
Methods inherited from interface DataContainer
getUserData, setUserData
-
Methods inherited from interface Shape
computeAABB, contains, createAABB, createAABB, getCenter, getRadius, project, rotateAboutCenter
-
Methods inherited from interface Translatable
translate
-
-
-
-
Constructor Detail
-
Capsule
public Capsule(double width, double height)
Minimal constructor.Creates an axis-aligned capsule centered on the origin with the caps on ends of the larger dimension.
- Parameters:
width
- the bounding rectangle widthheight
- the bounding rectangle height- Throws:
IllegalArgumentException
- thrown if width or height are less than or equal to zero or if the width and height are near equal
-
-
Method Detail
-
toString
public String toString()
- Overrides:
toString
in classAbstractShape
-
getAxes
public Vector2[] getAxes(Vector2[] foci, Transform transform)
Description copied from interface:Convex
Returns an array of separating axes to test for thisShape
.The
foci
parameter is an array of circular focal points of the otherShape
.If foci points are given, this method will return the separating axes for this
Shape
's voronoi regions also. The points in the foci array are assumed to be in world space.The returned axes are normalized and in world space.
-
getFoci
public Vector2[] getFoci(Transform transform)
Description copied from interface:Convex
Returns an array of world space foci points for circular curved edges.This method returns null if the
Shape
has zero curved edges.The returned points are in world space.
-
getFarthestPoint
public Vector2 getFarthestPoint(Vector2 vector, Transform transform)
Description copied from interface:Convex
Returns the point farthest in the direction of the given vector. If two points are equally distant along the givenVector2
the first one is used.The returned point is in world space.
-
getFarthestFeature
public Feature getFarthestFeature(Vector2 vector, Transform transform)
Description copied from interface:Convex
Returns theFeature
farthest in the direction of the given vector.The returned feature is in world space.
-
project
public Interval project(Vector2 vector, Transform transform)
Description copied from interface:Shape
-
computeAABB
public void computeAABB(Transform transform, AABB aabb)
Description copied from interface:Shape
Computes theAABB
from thisShape
after applying the given transformation and places the result in the givenAABB
.- Specified by:
computeAABB
in interfaceShape
- Parameters:
transform
- theTransform
for thisShape
aabb
- the destinationAABB
-
createMass
public Mass createMass(double density)
Description copied from interface:Shape
- Specified by:
createMass
in interfaceShape
- Parameters:
density
- the density in kg/m2- Returns:
Mass
theMass
of thisShape
-
getRadius
public double getRadius(Vector2 center)
Description copied from interface:Shape
Returns the radius of the shape if the given point was the center for this shape.
-
contains
public boolean contains(Vector2 point, Transform transform)
Description copied from interface:Shape
-
rotate
public void rotate(Rotation rotation, double x, double y)
Description copied from interface:Rotatable
Rotates the object about the given point.- Specified by:
rotate
in interfaceRotatable
- Overrides:
rotate
in classAbstractShape
- Parameters:
rotation
- theRotation
representing the rotation amountx
- the x coordinate to rotate abouty
- the y coordinate to rotate about
-
translate
public void translate(double x, double y)
Description copied from interface:Translatable
Translates the object the given amounts in the respective directions.- Specified by:
translate
in interfaceTranslatable
- Overrides:
translate
in classAbstractShape
- Parameters:
x
- the translation in the x directiony
- the translation in the y direction
-
getRotationAngle
public double getRotationAngle()
Returns the rotation about the local center in radians in the range [-π, π].- Returns:
- double the rotation in radians
-
getRotation
public Rotation getRotation()
- Returns:
- the
Rotation
object that represents the local rotation
-
getLength
public double getLength()
Returns the length of the capsule.The length is the largest dimension of the capsule's bounding rectangle.
- Returns:
- double
-
getCapRadius
public double getCapRadius()
Returns the end cap radius.- Returns:
- double
-
-