Exemple #1
0
        /// <summary>
        /// Находит точку, являющуюся пересечением перпендикуляра опущенного от заданной точки к прямой, проходящей на заданном углу (высота не учитывается)
        /// Работает на малых расстояниях (считается, что поверхность плоская)
        /// </summary>
        public static GeoPoint IntersectionLineAndPerpendicularFromPoint(GeoPoint lineX, GeoPoint lineY, double alpha)
        {
            var azimuth = lineX.Azimuth(lineY) + alpha;
            var b       = Distance(lineX, lineY);
            var c       = Math.Abs(b / Math.Cos(DegreesToRadians(alpha)));

            return(lineX.RadialPoint(c, azimuth));
        }
Exemple #2
0
        /// <summary>
        /// Находит точку на заданной линии, являющуюся пересечением перпендикуляра опущенного из заданной точки к прямой (высота не учитывается)
        /// Работает на малых расстояниях (считается, что поверхность плоская)
        /// </summary>
        public static GeoPoint IntersectionLineAndPerpendicularFromPoint(GeoPoint lineX, GeoPoint lineY, GeoPoint p)
        {
            var azimuth = DegreesToRadians(lineX.Azimuth(lineY) - lineX.Azimuth(p));
            var d       = Distance(lineX, p);
            var h       = Math.Abs(d * Math.Cos(azimuth));

            return(lineX.RadialPoint(h, lineX.Azimuth(lineY)));
        }
Exemple #3
0
        public static IEnumerable <GeoPoint> SplitIntoGeoPoints(GeoPoint startLocation, GeoPoint endLocation, int stepCount)
        {
            var dist = startLocation.DistanceTo(endLocation) / stepCount;

            stepCount = stepCount == 0 ? 1 : Math.Abs(stepCount);

            var vAlt = 0.0;

            if (startLocation.Altitude.HasValue && endLocation.Altitude.HasValue)
            {
                vAlt = (double)((endLocation.Altitude - startLocation.Altitude) / stepCount);
            }

            var a = startLocation.Azimuth(endLocation);


            for (var i = 0; i <= stepCount; i++)
            {
                yield return(startLocation.RadialPoint(i * dist, a).AddAltitude(vAlt * i));
            }
        }
Exemple #4
0
 /// <summary>
 /// Возвращает точку, которая находится на луче, начало которого в точке <paramref name="p1"/>
 /// Луч проходит через точку p2. Расстояние между p1 и возвращаемой точкой равно указанному <paramref name="distance"/>
 /// <param name="distance"> Расстояние в метрах</param>
 /// </summary>
 public static GeoPoint VectorMove(this GeoPoint p1, GeoPoint p2, int distance)
 {
     return(p1.RadialPoint(distance, p1.Azimuth(p2)));
 }