public override AZELCoordinate CoordinateAtTime(decimal elapsedTime, AZELCoordinate startCoordinates)
 {
     if (elapsedTime > 0)
     {
         DateTime currentTime = startTime.AddSeconds((double)elapsedTime);
         AASharp.AAS2DCoordinate celestialLocation = CelestialLocation.CelestialObjectSwitch(celestialObject, currentTime);
         return(new AZELCoordinate((decimal)celestialLocation.X, (decimal)celestialLocation.Y));
     }
     else
     {
         return(startCoordinates);
     }
 }
Example #2
0
        public void ProcessInstructionInput(Instruction instruction, AZELCoordinate startCoords)
        {
            TimeSpan interval = instruction.destinationTime - DateTime.Now;

            // Some kind of global call that gets the current position from the last read encoder values
            // For now, populate with Form Encoder


            // Set Start time to now
            instruction.setStartTime(DateTime.Now);

            for (int i = 0; i < interval.TotalSeconds; i++)
            {
                trajectory.Add(new DiscreteCommand(instruction.CoordinateAtTime(i, startCoords), i));
            }
        }
        public override AZELCoordinate CoordinateAtTime(decimal elapsedTime, AZELCoordinate startCoordinates)
        {
            int timeInterval = (int)destinationTime.Subtract(startTime).TotalSeconds;

            if (timeInterval > 0 && elapsedTime > 0)
            {
                decimal mAZ = (destinationCoordinates.azimuth - startCoordinates.azimuth) / timeInterval;
                decimal mEL = (destinationCoordinates.elevation - startCoordinates.elevation) / timeInterval;
                return(new AZELCoordinate(
                           (mAZ * elapsedTime) + startCoordinates.azimuth,
                           (mEL * elapsedTime) + startCoordinates.elevation
                           ));
            }
            else
            {
                return(startCoordinates);
            }
        }
        public override AZELCoordinate CoordinateAtTime(decimal elapsedTime, AZELCoordinate startCoordinates)
        {
            int destinationElapsedTime = destinationTime.Subtract(startTime).Seconds;

            if (destinationElapsedTime > 0 && elapsedTime > 0)
            {
                decimal mAZ = (destinationCoordinates.azimuth - startCoordinates.azimuth) / destinationElapsedTime;
                decimal mEL = (destinationCoordinates.elevation - startCoordinates.elevation) / destinationElapsedTime;
                return(new AZELCoordinate(
                           (mAZ * elapsedTime) + startCoordinates.azimuth,
                           (mEL * elapsedTime) + startCoordinates.elevation
                           ));
            }
            else
            {
                return(startCoordinates);
            }
        }
        public override AZELCoordinate CoordinateAtTime(decimal elapsedTime, AZELCoordinate startCoordinates)
        {
            int destinationElapsedTime = destinationTime.Subtract(startTime).Seconds;

            if (destinationElapsedTime > 0 && elapsedTime > 0)
            {
                // This is wrong, we have to actually find arc length

                AZELCoordinate result = new AZELCoordinate(0, 0);

                decimal b        = destinationCoordinates.azimuth - startCoordinates.azimuth;
                decimal timeDone = elapsedTime / destinationElapsedTime;
                decimal azDone   = timeDone * b;

                result.elevation = body.height * (timeDone * timeDone) / (b * b);
                result.azimuth   = azDone + startCoordinates.azimuth;

                return(result);
            }
            else
            {
                return(startCoordinates);
            }
        }
        public override AZELCoordinate CoordinateAtTime(decimal elapsedTime, AZELCoordinate startCoordinates)
        {
            int timeInterval = (int)destinationTime.Subtract(startTime).TotalSeconds;

            if (timeInterval > 0 && elapsedTime > 0)
            {
                // Assume change in azimuth and change in elevation are both positive
                decimal dAZ = Math.Abs(destinationCoordinates.azimuth - startCoordinates.azimuth);
                decimal dEL = Math.Abs(destinationCoordinates.elevation - startCoordinates.elevation);

                // Every DriftScan must be at least one change in azimuth across
                decimal pathLength = dAZ;

                // Track how much change in elevation is left
                decimal remainingEL = dEL;

                while (remainingEL > 2 * SCAN_DROP_DEGREES)
                {
                    pathLength  += ((2 * dAZ) + (2 * SCAN_DROP_DEGREES));
                    remainingEL -= (2 * SCAN_DROP_DEGREES);
                }

                // Ignore this case for now (assume the difference in position is an
                // exact interval of 2*SCAN_DROP_DEGREES)
                // pathLength += remainingEL;

                decimal portionDone = pathLength * (elapsedTime / timeInterval);

                AZELCoordinate cumulative = new AZELCoordinate(0, 0);
                decimal        accPath    = 0;
                decimal        sequence   = 0;

                while (true)
                {
                    switch (sequence)
                    {
                    case 0:
                        if (portionDone - accPath > dAZ)
                        {
                            accPath += dAZ;
                        }
                        else
                        {
                            cumulative.azimuth = portionDone - accPath;
                            return(cumulative);
                        }
                        break;

                    case 1:
                        if (portionDone - accPath > SCAN_DROP_DEGREES)
                        {
                            accPath += SCAN_DROP_DEGREES;
                            cumulative.elevation += SCAN_DROP_DEGREES;
                        }
                        else
                        {
                            cumulative.elevation += portionDone - accPath;
                            cumulative.azimuth    = dAZ;
                            return(cumulative);
                        }
                        break;

                    case 2:
                        if (portionDone - accPath > dAZ)
                        {
                            accPath += dAZ;
                        }
                        else
                        {
                            cumulative.azimuth = dAZ - portionDone + accPath;
                            return(cumulative);
                        }
                        break;

                    case 3:
                        if (portionDone - accPath > SCAN_DROP_DEGREES)
                        {
                            accPath += SCAN_DROP_DEGREES;
                            cumulative.elevation += SCAN_DROP_DEGREES;
                        }
                        else
                        {
                            cumulative.elevation += portionDone - accPath;
                            cumulative.azimuth    = 0;
                            return(cumulative);
                        }
                        break;
                    }

                    sequence = (sequence + 1) % 4;
                }
            }
            else
            {
                return(startCoordinates);
            }
        }
 public ScanInstruction(decimal az, decimal el, DateTime destTime) : base(destTime)
 {
     destinationCoordinates = new AZELCoordinate(az, el);
 }
 // Abstract implementation
 public abstract AZELCoordinate CoordinateAtTime(decimal dt, AZELCoordinate curr);
 public Instruction(AZELCoordinate destCoords, DateTime destTime)
 {
     destinationCoordinates = destCoords;
     destinationTime        = destTime;
 }
        public override AZELCoordinate CoordinateAtTime(decimal elapsedTime, AZELCoordinate startCoordinates)
        {
            int destinationElapsedTime = destinationTime.Subtract(startTime).Seconds;

            if (destinationElapsedTime > 0 && elapsedTime > 0)
            {
                decimal dAZ = destinationCoordinates.azimuth - startCoordinates.azimuth;
                decimal dEL = destinationCoordinates.elevation - startCoordinates.elevation;

                decimal pathLength  = Math.Abs(dAZ);
                decimal remainingEL = Math.Abs(dEL);

                while (remainingEL > 2 * SCAN_DROP_DEGREES)
                {
                    pathLength  += (2 * Math.Abs(dAZ) + 2 * SCAN_DROP_DEGREES);
                    remainingEL -= (2 * SCAN_DROP_DEGREES);
                }

                // Ignore this case for now (assume the difference in position is an
                // exact interval of 2*SCAN_DROP_DEGREES + 1)
                //pathLength += remainingEL;

                decimal portionDone = pathLength * (elapsedTime / destinationElapsedTime);

                AZELCoordinate cumulative = new AZELCoordinate(0, 0);
                decimal        accPath    = Math.Abs(dAZ);

                decimal dDR = dEL >= 0 ? SCAN_DROP_DEGREES : -SCAN_DROP_DEGREES;
                decimal dIA = 0;

                while (true)
                {
                    if (portionDone - accPath > Math.Abs(dAZ))
                    {
                        dIA      = 1 - dIA;
                        accPath += Math.Abs(dAZ);
                    }
                    else
                    {
                        cumulative.azimuth = portionDone - accPath * (dAZ >= 0 ? 1 : -1);
                        Console.WriteLine(
                            "returning " + cumulative.azimuth.ToString() + " : " + cumulative.elevation.ToString()
                            );
                        return(cumulative);
                    }

                    if (portionDone - accPath > SCAN_DROP_DEGREES)
                    {
                        cumulative.elevation += dDR;
                        accPath += SCAN_DROP_DEGREES;
                    }
                    else
                    {
                        cumulative.elevation += portionDone - accPath;
                        Console.WriteLine(
                            "returning " + cumulative.azimuth.ToString() + " : " + cumulative.elevation.ToString()
                            );
                        return(cumulative);
                    }

                    Console.WriteLine(
                        accPath.ToString() + " : " + portionDone.ToString() + " : " +
                        cumulative.azimuth.ToString() + " : " + cumulative.elevation.ToString()
                        );
                }
            }
            else
            {
                return(startCoordinates);
            }
        }
Example #11
0
 public DiscreteCommand(AZELCoordinate coords, decimal ds)
 {
     coordinates = coords;
     diffSecs    = ds;
 }