示例#1
0
        public static Vector2f ClosestPointOnCircle(Circle2f circle, Vector2f p)
        {
            float cpx  = p.x - circle.Center.x;
            float cpy  = p.y - circle.Center.y;
            float dist = (float)Math.Sqrt(cpx * cpx + cpy * cpy);

            return(new Vector2f(circle.Center.x + circle.Radius * dist, circle.Center.y + circle.Radius * dist));
        }
示例#2
0
        public static bool CirlceContainsPoint(Circle2f circle, Vector2f p)
        {
            float cpx = p.x - circle.Center.x;
            float cpy = p.y - circle.Center.y;
            float r2  = circle.Radius * circle.Radius;

            return((cpx * cpx + cpy * cpy) <= r2);
        }
示例#3
0
        public static bool BoxIntersectsCircle(Box2f box, Circle2f circle)
        {
            if (circle.Center.x - circle.Radius > box.Max.x ||
                circle.Center.x + circle.Radius < box.Min.x)
            {
                return(false);
            }

            if (circle.Center.y - circle.Radius > box.Max.y ||
                circle.Center.y + circle.Radius < box.Min.y)
            {
                return(false);
            }

            return(true);
        }
示例#4
0
        public bool Add(Vector2f position, float radius)
        {
            if (position.x < 0 || position.x > Width)
            {
                return(false);
            }
            if (position.y < 0 || position.y > Height)
            {
                return(false);
            }

            int x = (int)Math.Floor(position.x / CellSize);
            int y = (int)Math.Floor(position.y / CellSize);

            if (x < 0 || x >= GridWidth)
            {
                return(false);
            }
            if (y < 0 || y >= GridHeight)
            {
                return(false);
            }

            Circle2f circle = new Circle2f();

            circle.Center = position;
            circle.Radius = radius;

            if (m_grid[x, y] == null)
            {
                m_grid[x, y] = new List <Circle2f>();
            }

            var list = m_grid[x, y];

            list.Add(circle);
            Count++;

            return(true);
        }
示例#5
0
        public static bool CircleIntersectsCircle(Circle2f circle0, Circle2f circle1)
        {
            float r = circle0.Radius + circle1.Radius;

            return((circle0.Center - circle1.Center).SqrMagnitude <= r * r);
        }