Exemplo n.º 1
0
        void Update()
        {
            if (Input.GetKeyDown(KeyCode.KeypadPlus))
            {
                var maxSteps = closestApproaches.Count + 1;
                var ca       = PhysicsUtils.ClosestApproach(
                    new PhysicalState
                {
                    Position     = fromVector3(Subject.position),
                    Velocity     = subjectVelocity,
                    Acceleration = subjectAcceleration
                },
                    new PhysicalState
                {
                    Position     = fromVector3(Target.position),
                    Velocity     = targetVelocity,
                    Acceleration = targetAcceleration
                },
                    1.0f,
                    maxSteps
                    );

                var dist = ca.x;
                var tti  = ca.y;

                var fSubject = PhysicsUtils.PredictFutureState(new PhysicalState()
                {
                    Position     = Subject.position,
                    Velocity     = subjectVelocity,
                    Acceleration = subjectAcceleration
                }, tti).Position;

                var fTarget = PhysicsUtils.PredictFutureState(new PhysicalState()
                {
                    Position     = Target.position,
                    Velocity     = targetVelocity,
                    Acceleration = targetAcceleration
                }, tti).Position;

                var diffDist = math.distance(fSubject, fTarget);

                closestApproaches.Add(new ClosestApproachResult()
                {
                    distance        = dist,
                    tti             = tti,
                    subjectPosition = fSubject,
                    targetPosition  = fTarget,
                    distCheck       = diffDist
                });

                Text.text += "\nCD: " + dist + " / DD: " + diffDist;
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                var lastTti = -1f;
                for (var maxSteps = 1; maxSteps < 10; maxSteps++)
                {
                    var intercept = PhysicsUtils.AccelerationToIntercept(
                        new PhysicalState
                    {
                        Position     = fromVector3(Subject.position),
                        Velocity     = subjectVelocity,
                        Acceleration = subjectAcceleration
                    },
                        new PhysicalState
                    {
                        Position     = fromVector3(Target.position),
                        Velocity     = targetVelocity,
                        Acceleration = targetAcceleration
                    },
                        maxAccMag,
                        1.0f,
                        maxSteps
                        );

                    // if (intercept.TimeToIntercept - lastTti < float.Epsilon) break;
                    lastTti = intercept.TimeToIntercept;

                    intercepts.Add(intercept);
                }
            }

            if (Input.GetKeyDown(KeyCode.Return))
            {
                intercepts.Clear();
                closestApproaches.Clear();
                Text.text = "";
            }
        }