コード例 #1
0
        /// <summary>
        /// Calculates the tangent visibility graph
        /// </summary>
        /// <param name="obstacles">a list of polylines representing obstacles</param>
        /// <returns></returns>
        public static VisibilityGraph FillVisibilityGraphForShortestPath(IEnumerable <Polyline> obstacles)
        {
            var holes           = new List <Polyline>(OrientHolesClockwise(obstacles));
            var visibilityGraph = CalculateGraphOfBoundaries(holes);

            var polygons = holes.Select(hole => new Polygon(hole)).ToList();

            TangentVisibilityGraphCalculator.AddTangentVisibilityEdgesToGraph(polygons, visibilityGraph);
            return(visibilityGraph);
        }
        internal static void AddTangentVisibilityEdgesToGraph(List <Polygon> holes, VisibilityGraph visibilityGraph)
        {
            if (holes.Count > 1)
            {
                TangentVisibilityGraphCalculator calculator = new TangentVisibilityGraphCalculator(holes, visibilityGraph, true);
                calculator.CalculateAndAddEdges();

                //use another family of tangents
                calculator = new TangentVisibilityGraphCalculator(holes, visibilityGraph, false);
                calculator.CalculateAndAddEdges();
            }
        }
        internal static void AddTangentVisibilityEdgesToGraph(List<Polygon> holes, VisibilityGraph visibilityGraph) {

            if (holes.Count > 1) {
                TangentVisibilityGraphCalculator calculator = new TangentVisibilityGraphCalculator(holes, visibilityGraph, true);
                calculator.CalculateAndAddEdges();

                //use another family of tangents
                calculator = new TangentVisibilityGraphCalculator(holes, visibilityGraph, false);
                calculator.CalculateAndAddEdges();
            }

        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="pathStart"></param>
        /// <param name="pathEnd"></param>
        /// <param name="obstacles"></param>
        /// <param name="sourceVertex">graph vertex corresponding to the source</param>
        /// <param name="targetVertex">graph vertex corresponding to the target</param>
        /// <returns></returns>
        internal static VisibilityGraph GetVisibilityGraphForShortestPath(Point pathStart, Point pathEnd,
                                                                          IEnumerable <Polyline> obstacles,
                                                                          out VisibilityVertex sourceVertex,
                                                                          out VisibilityVertex targetVertex)
        {
            var holes           = new List <Polyline>(OrientHolesClockwise(obstacles));
            var visibilityGraph = CalculateGraphOfBoundaries(holes);
            var polygons        = holes.Select(hole => new Polygon(hole)).ToList();

            TangentVisibilityGraphCalculator.AddTangentVisibilityEdgesToGraph(polygons, visibilityGraph);
            PointVisibilityCalculator.CalculatePointVisibilityGraph(holes, visibilityGraph, pathStart,
                                                                    VisibilityKind.Tangent, out sourceVertex);
            PointVisibilityCalculator.CalculatePointVisibilityGraph(holes, visibilityGraph, pathEnd,
                                                                    VisibilityKind.Tangent, out targetVertex);

            return(visibilityGraph);
        }