Exemplo n.º 1
0
        IFigure IGeometryForLogic.Intersection(IFigure first, IFigure second)//Non Convex Intersection
        {
            //как-то приходим к List<Line> и проч. пока не знаю как.
            IFigure result = null;

            List <Line> pe1 = null; // брать из path, видимо.
            List <Line> pe2 = null;
            //если результат build_CHT - нельзя определить выпуклую оболочку, тогда возвращать null. Для арок, будет null, видимо.

            Tree <List <Line> > first_tree  = first.Build_CHT(pe1);
            Tree <List <Line> > second_tree = second.Build_CHT(pe2);

            if (first_tree != null & second_tree != null)
            {
                if (first_tree.HasChildren == false)
                {
                    Tree <List <Line> > Result = first.CNINT(second_tree, first_tree.Value); // first - выпуклая, second - дерево выпуклых
                    first.Build_figure_from_CHT(Result);
                    return(null);
                }
                if (second_tree.HasChildren == false)
                {
                    Tree <List <Line> > Result = second.CNINT(first_tree, second_tree.Value); // наоборот
                    second.Build_figure_from_CHT(Result);
                    //как-то преобразовать в path-ы и вернуть?
                    return(null);
                }
                //обе фигуры невыпуклые

                /*
                 *  //проверка на пересечение CNINT first.value и second_tree
                 *  oi = CNINT(first_tree.value, second_tree)
                 *  //если пересечение пусто
                 *  if(oi == null)
                 *      return null
                 *  иначе делать текст ниже:
                 *
                 * List<Tree<List<Line>>> Child_List = null;
                 * Child_List = oi.localChildren;
                 * foreach (Tree<List<Line>> Elem in Child_List) //обход дерева
                 * {
                 *
                 *  //local_intersection = CNINT (
                 *  //...
                 * }
                 */
            }
            return(result);
        }