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(); } }
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); }
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); }