Пример #1
0
        private void insert_in_t4(Polyline p)
        {
            for (int i = 0; i < p.NumSegments; i++)
            {
                object  seg = p.GetSegment(i);
                T4_rect rect;

                if (seg is Line2F)
                {
                    Line2F line = ((Line2F)seg);
                    rect = new T4_rect(Math.Min(line.p1.X, line.p2.X),
                                       Math.Min(line.p1.Y, line.p2.Y),
                                       Math.Max(line.p1.X, line.p2.X),
                                       Math.Max(line.p1.Y, line.p2.Y));
                }
                else if (seg is Arc2F)
                {
                    Point2F min = Point2F.Undefined;
                    Point2F max = Point2F.Undefined;
                    ((Arc2F)seg).GetExtrema(ref min, ref max);
                    rect = new T4_rect(min.X, min.Y, max.X, max.Y);
                }
                else
                {
                    throw new Exception("unknown segment type");
                }

                _t4.Add(rect, seg);
            }
        }
Пример #2
0
        public void Add(Point2F center, double radius, object obj)
        {
            T4_rect rect = new T4_rect(center.X - radius,
                                       center.Y - radius,
                                       center.X + radius,
                                       center.Y + radius);

            _t4.Add(rect, obj);
        }
Пример #3
0
        private List <Circle2F> find_intersecting_balls(Line2F line)
        {
            T4_rect rect = new T4_rect(Math.Min(line.p1.X, line.p2.X),
                                       Math.Min(line.p1.Y, line.p2.Y),
                                       Math.Max(line.p1.X, line.p2.X),
                                       Math.Max(line.p1.Y, line.p2.Y));

            List <Circle2F> balls = new List <Circle2F>();

            // since objects in t4 are generic, convert convert rects backs to balls
            foreach (T4_rect ballrect in _t4.Get_colliding_obj_rects(rect))
            {
                balls.Add(new Circle2F(new Point2F(ballrect.Xc, ballrect.Yc), ballrect.W / 2));
            }

            return(balls);
        }
Пример #4
0
        public List <T> Get_colliding_objects <T>(Point2F min, Point2F max)
        {
            T4_rect rect = new T4_rect(min.X, min.Y, max.X, max.Y);

            return(_t4.Get_colliding_objects <T>(rect));
        }