Пример #1
0
        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);
        }
Пример #2
0
        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);
        }