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)); }
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); }
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); }
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); }
public static bool CircleIntersectsCircle(Circle2f circle0, Circle2f circle1) { float r = circle0.Radius + circle1.Radius; return((circle0.Center - circle1.Center).SqrMagnitude <= r * r); }