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); }