37 if (distSqr > radius * radius)
63 int32 normalIndex = 0;
70 for (
int32 i = 0; i < vertexCount; ++i)
88 int32 vertIndex1 = normalIndex;
89 int32 vertIndex2 = vertIndex1 + 1 < vertexCount ? vertIndex1 + 1 : 0;
90 b2Vec2 v1 = vertices[vertIndex1];
91 b2Vec2 v2 = vertices[vertIndex2];
140 b2Vec2 faceCenter = 0.5f * (v1 + v2);
141 float32 separation =
b2Dot(cLocal - faceCenter, normals[vertIndex1]);
142 if (separation > radius)
float32 b2Dot(const b2Vec2 &a, const b2Vec2 &b)
Perform the dot product on two vectors.
b2Vec2 b2Mul(const b2Mat22 &A, const b2Vec2 &v)
b2Vec2 localNormal
not use for Type::e_points
void b2CollideCircles(b2Manifold *manifold, const b2CircleShape *circleA, const b2Transform &xfA, const b2CircleShape *circleB, const b2Transform &xfB)
Compute the collision manifold between two circles.
b2ContactID id
uniquely identifies a contact point between two shapes
void SetZero()
Set this vector to all zeros.
float32 b2DistanceSquared(const b2Vec2 &a, const b2Vec2 &b)
b2Vec2 m_vertices[b2_maxPolygonVertices]
int32 pointCount
the number of manifold points
b2Vec2 localPoint
usage depends on manifold type
b2Vec2 b2MulT(const b2Mat22 &A, const b2Vec2 &v)
b2Vec2 localPoint
usage depends on manifold type
void b2CollidePolygonAndCircle(b2Manifold *manifold, const b2PolygonShape *polygonA, const b2Transform &xfA, const b2CircleShape *circleB, const b2Transform &xfB)
Compute the collision manifold between a polygon and a circle.
b2ManifoldPoint points[b2_maxManifoldPoints]
the points of contact
float32 Normalize()
Convert this vector into a unit vector. Returns the length.
b2Vec2 m_normals[b2_maxPolygonVertices]