GetSupport() public method

Get the supporting vertex index in the given direction.
public GetSupport ( Vector2 direction ) : int
direction Vector2 The direction.
return int
Ejemplo n.º 1
0
        public float FindMinSeparation(out int indexA, out int indexB, float t)
        {
            Transform xfA, xfB;

            _sweepA.GetTransform(out xfA, t);
            _sweepB.GetTransform(out xfB, t);

            switch (_type)
            {
            case SeparationFunctionType.Points:
            {
                Vector2 axisA = MathUtils.MultiplyT(ref xfA.R, _axis);
                Vector2 axisB = MathUtils.MultiplyT(ref xfB.R, -_axis);

                indexA = _proxyA.GetSupport(axisA);
                indexB = _proxyB.GetSupport(axisB);

                Vector2 localPointA = _proxyA.GetVertex(indexA);
                Vector2 localPointB = _proxyB.GetVertex(indexB);

                Vector2 pointA = MathUtils.Multiply(ref xfA, localPointA);
                Vector2 pointB = MathUtils.Multiply(ref xfB, localPointB);

                float separation = Vector2.Dot(pointB - pointA, _axis);
                return(separation);
            }

            case SeparationFunctionType.FaceA:
            {
                Vector2 normal = MathUtils.Multiply(ref xfA.R, _axis);
                Vector2 pointA = MathUtils.Multiply(ref xfA, _localPoint);

                Vector2 axisB = MathUtils.MultiplyT(ref xfB.R, -normal);

                indexA = -1;
                indexB = _proxyB.GetSupport(axisB);

                Vector2 localPointB = _proxyB.GetVertex(indexB);
                Vector2 pointB      = MathUtils.Multiply(ref xfB, localPointB);

                float separation = Vector2.Dot(pointB - pointA, normal);
                return(separation);
            }

            case SeparationFunctionType.FaceB:
            {
                Vector2 normal = MathUtils.Multiply(ref xfB.R, _axis);
                Vector2 pointB = MathUtils.Multiply(ref xfB, _localPoint);

                Vector2 axisA = MathUtils.MultiplyT(ref xfA.R, -normal);

                indexB = -1;
                indexA = _proxyA.GetSupport(axisA);

                Vector2 localPointA = _proxyA.GetVertex(indexA);
                Vector2 pointA      = MathUtils.Multiply(ref xfA, localPointA);

                float separation = Vector2.Dot(pointA - pointB, normal);
                return(separation);
            }

            default:
                Debug.Assert(false);
                indexA = -1;
                indexB = -1;
                return(0.0f);
            }
        }