Box2D.Collision.Collision.CollideCircles C# (CSharp) Метод

CollideCircles() публичный Метод

Compute the collision manifold between two circles.
public CollideCircles ( Manifold manifold, CircleShape circle1, Transform xfA, CircleShape circle2, Transform xfB ) : void
manifold Manifold
circle1 Box2D.Collision.Shapes.CircleShape
xfA Box2D.Common.Transform
circle2 Box2D.Collision.Shapes.CircleShape
xfB Box2D.Common.Transform
Результат void
        public void CollideCircles(Manifold manifold, CircleShape circle1, Transform xfA, CircleShape circle2, Transform xfB)
        {
            manifold.PointCount = 0;

            // before inline:
            Transform.MulToOut(xfA, circle1.P, P_A);
            Transform.MulToOut(xfB, circle2.P, P_B);
            D.Set(P_B).SubLocal(P_A);
            float distSqr = D.X * D.X + D.Y * D.Y;

            // after inline:
            // final Vec2 v = circle1.m_p;
            // final float pAy = xfA.p.y + xfA.q.ex.y * v.x + xfA.q.ey.y * v.y;
            // final float pAx = xfA.p.x + xfA.q.ex.x * v.x + xfA.q.ey.x * v.y;
            //
            // final Vec2 v1 = circle2.m_p;
            // final float pBy = xfB.p.y + xfB.q.ex.y * v1.x + xfB.q.ey.y * v1.y;
            // final float pBx = xfB.p.x + xfB.q.ex.x * v1.x + xfB.q.ey.x * v1.y;
            //
            // final float dx = pBx - pAx;
            // final float dy = pBy - pAy;
            //
            // final float distSqr = dx * dx + dy * dy;
            // end inline

            float radius = circle1.Radius + circle2.Radius;
            if (distSqr > radius * radius)
            {
                return;
            }

            manifold.Type = Manifold.ManifoldType.Circles;
            manifold.LocalPoint.Set(circle1.P);
            manifold.LocalNormal.SetZero();
            manifold.PointCount = 1;

            manifold.Points[0].LocalPoint.Set(circle2.P);
            manifold.Points[0].Id.Zero();
        }