Exemplo n.º 1
0
        public static LocationState CalculateVector(LocationState friend, LocationState target)
        {
            if (friend == target)
            {
                return(new LocationState(0, 0));
            }

            Side SF = new Side(friend.Distance);                    // Spotter to Friend
            Side ST = new Side(target.Distance);                    // Spotter to Target
            Side FT;                                                // Friend  to Target (result)

            Angle NSF = new Angle(Angle.ToRadians(friend.Azimuth)); // North   to Spotter to Friend
            Angle NST = new Angle(Angle.ToRadians(target.Azimuth)); // North   to Spotter to Target
            Angle NFT;                                              // North   to Friend  to Target (result)

            // Calculated values
            Angle SFT;                                              // Spotter to Friend  to Target
            Angle delta;                                            // Change between NSF and NST
            Angle PI = new Angle(Math.PI);                          // 180 degree angle for easy computing.

            delta = new Angle(Math.Abs(NSF.Radians - NST.Radians));
            FT    = MathExtension.LawOfCosines(SF, ST, delta);
            // Order matters here. Side ST must always be the 3rd parameter.
            SFT = MathExtension.LawOfCosines(SF, FT, ST);
            double SFTdegrees = Math.Round(SFT.Degrees);

            // Make sure Angle stays between 0 - 360 degrees or 0 and 2PI radians
            delta.Validate();
            NFT = NSF + PI + ((delta.Degrees > PI.Degrees ^ NST > NSF) ? -SFT : SFT);
            NFT.Validate();

            return(new LocationState(FT.Length, NFT.Degrees));
        }
Exemplo n.º 2
0
        public static void Main()
        {
            Storage.Put(Storage.CurrentContext, "Hello", "World");

            NFT e = NFT.New();
        }