当前位置: 首页>>代码示例>>C#>>正文


C# Line.intersect方法代码示例

本文整理汇总了C#中Line.intersect方法的典型用法代码示例。如果您正苦于以下问题:C# Line.intersect方法的具体用法?C# Line.intersect怎么用?C# Line.intersect使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Line的用法示例。


在下文中一共展示了Line.intersect方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: workSpace_MouseUp

 private void workSpace_MouseUp(object sender, MouseEventArgs e)
 {
     if (currentPolygon != -1)
     {
         Point newPoint = new Point(e.X, e.Y);  //точка, которую добавил пользователь
         Point lastPoint = polygons[currentPolygon].getLastPoint();
         if (polygons[currentPolygon].addPoint(newPoint))
         {
             if (currentPolygon == 0)
                 tbPointsPolygonA.Text += (Environment.NewLine + newPoint.ToString());
             else
                 tbPointsPolygonB.Text += (Environment.NewLine + newPoint.ToString());
             if (polygons[currentPolygon].getCountPoints() > 1)
             {
                 g.DrawLine(Pens.Black, lastPoint, newPoint);    //рисуем отрезок к новой точке
             }
             else
             {
                 g.FillRectangle(Brushes.Black, newPoint.X, newPoint.Y, 1, 1);   //рисуем первую точку
             }
         }
     }
     else
     {
         MessageBox.Show("На данный момент не активировано рисование полигонов!");
         Line line = new Line(new Point(30, 30), new Point(70, 30));
         Line line2 = new Line(new Point(25, 30), new Point(75, 30));
         MessageBox.Show(line.intersect(line2).ToString());
     }
 }
开发者ID:valera600,项目名称:VisualStudio,代码行数:30,代码来源:Form1.cs

示例2: btUnion_Click

        private void btUnion_Click(object sender, EventArgs e)
        {
            Collection<Line> one, two, newOne, newTwo, union;
            one = polygons[0].getLinesCollection(); //линии первого полигона
            two = polygons[1].getLinesCollection(); //линии второго полигона
            int N = one.Count; //число линий в первом полигоне
            int M = two.Count; //число линий во втором полигоне
            if (N > 2 && M > 2)
            {
                Point intersect = new Point();  //точка пересечения
                Collection<Point> intersectPoints = new Collection<Point>(); //запомним какие из точек - точки пересечения
                newOne = new Collection<Line>(); //первый полигон, дополненный точками пересечения
                newTwo = new Collection<Line>(); //второй с точками пересечения
                union = new Collection<Line>();

                //добавляем в полигоны точки пересечений
                for (int i = 0; i < N; i++)
                {
                    newOne.Add(one[i]);
                    for (int j = 0; j < M; j++)
                    {
                        if (i == 0)
                            newTwo.Add(two[j]); //добавляем линии второго полигона только один раз
                        intersect = one[i].getIntersectPoint(two[j]); //находим точку пересечения
                        if (one[i].a == intersect || one[i].b == intersect || two[j].a == intersect || two[j].b == intersect)
                            intersect = new Point();
                        if (!intersect.IsEmpty)
                        {
                            tbLog.Text += ("Точка пересечения " + intersect.ToString()) + Environment.NewLine;
                            intersectPoints.Add(intersect);
                            //для первого полигона
                            foreach (Line line in newOne)
                            {
                                if (line.hasPoint(intersect))
                                {
                                    tbLog.Text += ("Точка есть в А") + Environment.NewLine;
                                    //запоминаем точки отрезка с точкой пересечения
                                    Point a = new Point(line.a.X, line.a.Y);
                                    Point b = new Point(line.b.X, line.b.Y);
                                    //удаляем этот отрезок
                                    newOne.Remove(line);
                                    //добавляем два новых
                                    newOne.Add(new Line(a, intersect));
                                    newOne.Add(new Line(intersect, b));
                                    break;
                                }
                            }
                            //для второго полигона
                            foreach (Line line in newTwo)
                            {
                                if (line.hasPoint(intersect))
                                {
                                    tbLog.Text += ("Точка есть в Б") + Environment.NewLine;
                                    //запоминаем точки отрезка с точкой пересечения
                                    Point a = new Point(line.a.X, line.a.Y);
                                    Point b = new Point(line.b.X, line.b.Y);
                                    //удаляем этот отрезок
                                    newTwo.Remove(line);
                                    //добавляем два новых
                                    newTwo.Add(new Line(a, intersect));
                                    newTwo.Add(new Line(intersect, b));
                                    break;
                                }
                            }
                        }
                    }
                }

                Boolean pointOneInsideTwo, pointTwoInsideOne; //находится ли точка данного полигона внутри другого полигона

                //проверка на то, что на трассировочный луч попала вершина полигона

                Line ray = new Line(one[0].a, new Point(0, 0)); //трассировочный отрезок(луч) из проверяемой точки в 0,0
                /*Collection<Point> twoPolygon = polygons[1].pointCollection;
                foreach (Point point in twoPolygon)
                {
                    if(ray.hasPoint(point))
                    {
                    }
                }*/

                int countIntersect = 0; //счетчик пересечений с контуром полигона
                foreach (Line line in two)
                {
                    if (ray.intersect(line))
                    {
                        countIntersect++;
                    }
                }
                //если чётное количество пересечений с трассировочным лучом, то точка лежит вне проверяемого полигона
                if (countIntersect % 2 == 0)
                {
                    pointOneInsideTwo = false;
                }
                else
                {
                    pointOneInsideTwo = true;
                }

                //проверяем находится ли точка второго полигона внутри контура первого
//.........这里部分代码省略.........
开发者ID:valera600,项目名称:VisualStudio,代码行数:101,代码来源:Form1.cs


注:本文中的Line.intersect方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。