示例#1
0
        /// <summary>
        /// Atualiza as propriedades DistanciaBuracoMeio e DistanciaTeeMeio.
        /// </summary>
        private void CalcularNovaDistancia()
        {
            if (Jogo == null)
            {
                return;
            }

            Metrico tipoMetrico = (Jogo.Metrico.Nome.Equals("Metros")) ? Metrico.Metro : Metrico.Yard;

            DistanciaBuracoMeio = _geometriaService.ObterDistancia(BuracoPinPosicao, MeioPinPosicao, tipoMetrico);
            DistanciaTeeMeio    = _geometriaService.ObterDistancia(TeePinPosicao, MeioPinPosicao, tipoMetrico);
        }
示例#2
0
        public double ObterDistancia(Position posicaoOrigem, Position posicaoDestino, Metrico metrico)
        {
            //6371 - Quilómetros
            //3960 - Miles
            const double raio = 6371;

            var sdlat = Math.Sin((posicaoDestino.Latitude - posicaoOrigem.Latitude) / 2);
            var sdlon = Math.Sin((posicaoDestino.Longitude - posicaoOrigem.Longitude) / 2);
            var q     = sdlat * sdlat + Math.Cos(posicaoOrigem.Latitude) * Math.Cos(posicaoDestino.Latitude) * sdlon * sdlon;
            var d     = 2 * raio * Math.Asin(Math.Sqrt(q));

            Distance distancia = Distance.FromKilometers(d);

            double distanciaFinal = (metrico.Equals(Metrico.Metro)) ? distancia.Meters : (distancia.Meters * 1.0936133);

            return(distanciaFinal);
        }