本文整理汇总了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());
}
}
示例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;
}
//проверяем находится ли точка второго полигона внутри контура первого
//.........这里部分代码省略.........