コード例 #1
0
        private void AddAlignmentPoint(double[] mountAltAz, double[] observedAltAz, AxisPosition mountAxes, AxisPosition observedAxes, PierSide pierSide, DateTime syncTime)
        {
            lock (_accessLock)
            {
                if (AlignmentPoints.Count > 2 && ProximityLimit > 0.0)
                {
                    // Remove any existing alignment points that are too close to the new one.
                    var nearPoints = AlignmentPoints
                                     .Where(p => p.MountAxes.IncludedAngleTo(mountAxes) <= ProximityLimit).ToList();
                    foreach (AlignmentPoint deletePt in nearPoints)
                    {
                        AlignmentPoints.Remove(deletePt);
                    }
                }

                CarteseanCoordinate mountXy    = AltAzToCartesean(mountAltAz);
                CarteseanCoordinate observedXy = AltAzToCartesean(observedAltAz);
                AlignmentPoints.Add(new AlignmentPoint(observedAltAz, mountAxes, observedAxes, mountXy, observedXy, pierSide, syncTime));

                _currentChecksum = int.MinValue;    // Reset checksum so that offsets are recalculated

                OneStarAdjustment[0] = observedAxes[0] - mountAxes[0];
                OneStarAdjustment[1] = observedAxes[1] - mountAxes[1];
                SaveAlignmentPoints();
            }
        }
コード例 #2
0
        public void RoundTripPolarCartesTests(double alt, double az)
        {
            SphericalCoordinate inSpherical = new SphericalCoordinate()
            {
                X           = az,
                Y           = alt,
                WeightsDown = false
            };
            CarteseanCoordinate outCart      = model.SphericalToCartesean(inSpherical);
            SphericalCoordinate outSpherical = model.CarteseanToSpherical(outCart);

            Assert.AreEqual(inSpherical, outSpherical);
        }
コード例 #3
0
        private CarteseanCoordinate AltAzToCartesean(double[] altAz)
        {
            // The next line replaces AxesToSpherical,
            var    result = new CarteseanCoordinate();
            double radius = 90f - altAz[0];

            // Avoid division 0 errors
            if (Math.Abs(radius) < 0.0000001)
            {
                radius = 1;
            }
            // Get the cartesian coordinates
            double azRadians = AstroConvert.DegToRad(altAz[1]);
            var    x         = Math.Sin(azRadians);
            var    y         = -Math.Cos(azRadians);

            // Get unit vector
            result[0] = x * radius;
            result[1] = y * radius;

            return(result);
        }