public override bool Cross(Ray ray, bool withEdge) { Ray newRay; try { for (int i = 1; i < items.Count; i++) { newRay = new Ray(items[i - 1].CurrentPoint, items[i].CurrentPoint); if (ray.IsCross(newRay)) { Point crossPoint = ray.Cross(newRay); if (!(crossPoint == items.First().CurrentPoint || crossPoint == items.Last().CurrentPoint) && newRay.ContainsInner(crossPoint, !withEdge) && ray.ContainsInner(crossPoint, withEdge)) { return(true); } } } } catch { Console.WriteLine("Ошибка с пересечением Линии"); } return(false); }
private Point TakePoint(List <Item> generalItems, bool isInner) { //if (isInner) // return new Point(generalItems[generalItems.Count - 2].CurrentPoint.X - 5, generalItems[generalItems.Count - 2].CurrentPoint.Y); //else // return new Point(generalItems[generalItems.Count - 2].CurrentPoint.X + 5, generalItems[generalItems.Count - 2].CurrentPoint.Y); if (generalItems.Count > 2) { Ray beforeRay = new Ray(generalItems[generalItems.Count - 3].CurrentPoint, generalItems[generalItems.Count - 2].CurrentPoint); Ray afterRay = new Ray(generalItems[generalItems.Count - 2].CurrentPoint, generalItems[generalItems.Count - 1].CurrentPoint); Ray parallelBeforeRay = beforeRay.GetParallelRay(5.0f, isInner); Ray parallelAfterRay = afterRay.GetParallelRay(5.0f, isInner); return(parallelBeforeRay.Cross(parallelAfterRay)); //Ray ray = new Ray(generalItems[generalItems.Count - 3].CurrentPoint, newPoint); //Circle circle = new Circle(generalItems[generalItems.Count - 2].CurrentPoint, 5); //return circle.Cross(ray, isInner); } return(Point.Empty); }