示例#1
0
        public override R2NonCircularDirection ReflectAboutEqualAxis(int[] axisIndeces, int numberOfTimes)
        {
            R2Direction <R2NonCircularDirection, DoubleLinkedList <R2Point>, NonCircularDirection <R2NonCircularDirection, R2Point> > .ReflectAroundEqualAxis(new List <int>(axisIndeces), numberOfTimes, ref direction);

            return(new R2NonCircularDirection(new R2Point(StartingPoint.GetAxisAt(0), StartingPoint.GetAxisAt(1), StartingPoint.CanShoot),
                                              Direction, SharedDirection.DirectionLength, SharedDirection.Divisor, CanShoot, Duration));
        }
        // Only reflect about the origin. That is axisIndex 1.
        public R1Direction <IDirection> ReflectAboutAxis(int axisIndex)
        {
            int   originalDirection = direction.MyDirection;
            Point originalPoint     = StartingPoint;

            StartingPoint = new R1Point(-1 * StartingPoint.GetAxisAt(0)).Position;


            if (axisIndex == 1)
            {
                if (direction.MyDirection == 1)
                {
                    direction.MyDirection = 2;
                }
                else if (direction.MyDirection == 2)
                {
                    direction.MyDirection = 1;
                }
            }

            R1Direction <IDirection> reflectedDirection = (R1Direction <IDirection>)Clone();

            direction.MyDirection = originalDirection;
            StartingPoint         = originalPoint;

            return(reflectedDirection);
        }
        // The set the values for the Translate method.
        public R1Direction <IDirection> Translate(int coordinateSystemDirection, float amount)
        {
            float finalX = StartingPoint.GetAxisAt(0);
            float originalXCoordinate = finalX;


            switch (coordinateSystemDirection)
            {
            case 1:
                finalX -= Math.Abs(amount);

                break;

            default:
                finalX += Math.Abs(amount);
                break;
            }

            Point point = new R1Point(StartingPoint).Position;

            point.SetAxisAt(0, finalX);
            StartingPoint = point;

            R1Direction <IDirection> translatedDirection = (R1Direction <IDirection>)Clone();

            point.SetAxisAt(0, originalXCoordinate);
            StartingPoint = point;

            return(translatedDirection);
        }
        // Move direction.
        // Change the starting position on a direction.
        public override R1CircularDirection translate(int coordinateSystemDirection, float amount)
        {
            float finalX = StartingPoint.GetAxisAt(0);

            R1Direction <R1CircularDirection, CircularLinkedList <R1Point>, CircularDirection <R1CircularDirection, R1Point> > .Translate(coordinateSystemDirection, amount, ref finalX);

            return(new R1CircularDirection(new R1Point(finalX),
                                           Direction, SharedDirection.DirectionLength, SharedDirection.Divisor, Duration, numberOfRotations));
        }
        // Rotate about the  x-axis or y-axis a certatin number of times, and return the result.
        // Rotate around the x-axis or the y-axis.
        public override R2CircularDirection RotateAroundAxis(int indexOfAxis, int numberOfTimes)
        {
            R2CircularDirection direction = this;


            R2Direction <R2CircularDirection, CircularLinkedList <R2Point>, CircularDirection <R2CircularDirection, R2Point> > .RotateAroundAxis(indexOfAxis, numberOfTimes, this);

            return(new R2CircularDirection(new R2Point(StartingPoint.GetAxisAt(0), StartingPoint.GetAxisAt(1), StartingPoint.CanShoot),
                                           Direction, SharedDirection.DirectionLength, SharedDirection.Divisor, CanShoot, Duration));
        }