
=head1 NAME

Box2D::b2Manifold - Manifold for two touching convex shapes.

=head1 SYNOPSIS

  my $manifold = $contact->GetManifold();
  my $normal = $manifold->localNormal();
  my $point = $manifold->localPoint();

=head1 DESCRIPTION

A manifold for two touching convex shapes.

C<Box2D> supports multiple types of contact:

=over 4

=item * clip point versus plane with radius

=item * point versus point with radius (circles)

=back

The local point usage depends on the manifold type:

=over 4

=item * C<e_circles>: the local center of circleA

=item * C<e_faceA>: the center of faceA

=item * C<e_faceB>: the center of faceB

=back

Similarly the local normal usage:

=over 4

=item * C<e_circles>: not used

=item * C<e_faceA>: the normal on polygonA

=item * C<e_faceB>: the normal on polygonB

=back

We store contacts in this way so that position correction can account
for movement, which is critical for continuous physics. All contact
scenarios must be expressed in one of these types. This structure is
stored across time steps, so we keep it small.

=head1 METHODS

=head2 new()

Default constructor.

=head2 localNormal()

=head2 localNormal( $localNormal )

not use for Type::e_points

Parameters:

=over 4

=item * C<Box2D::b2Vec2> C<$localNormal> (optional)

=back

Returns a C<Box2D::b2Vec2>

=head2 localPoint()

=head2 localPoint( $localPoint )

usage depends on manifold type

Parameters:

=over 4

=item * C<Box2D::b2Vec2> C<$localPoint> (optional)

=back

Returns a C<Box2D::b2Vec2>

=head2 pointCount()

=head2 pointCount( $pointCount )

the number of manifold points

Parameters:

=over 4

=item * C<int32> C<$pointCount> (optional)

=back

Returns a C<int32>

=head1 SEE ALSO

=over 4

=item * L<Box2D>

=item * L<Box2D::b2Contact>

=back

=head1 BUGS

See L<Box2D/BUGS>

=head1 AUTHORS

See L<Box2D/AUTHORS>

=head1 COPYRIGHT & LICENSE

See L<Box2D/"COPYRIGHT & LICENSE">

=cut
