Intersection of circles is easy to calculate: if the square of the difference along the x plus the square of the difference along the y is less than the square of the sum of the radii, the circles intersect.
Note that this is already optimized a bit, as it avoids taking a square root. Additional optimizations are possible, e.g. when the difference along the x is greater than the sum of the radii, they will never intersect.
Just test the new circle against all existing circles, and you're done.
This is O(n^2), but is easy and pretty fast as each test is just a few, fast operations.
Of course, you could look for an optimization that you do not have to test each circle against all others, but those are expensive, lots of code, and thus only worth it for lots of circles. Try out the simple solution first.
In C++ code (sorry, I don't speak VB):
struct { double x, y, r; } Circle;
bool circleIsAllowed(const std::vector<Circle>& circles, const Circle& newCircle)
{
for(std::vector<Circle>::const_iterator it = circles.begin(); it != circles.end(); ++it) // foreach(Circle it in circles)
{
double sumR = it->r + newCircle.r; // + minimumDistanceBetweenCircles (if you want)
double dx = it->x - newCircle.x;
double dy = it->y - newCircle.y;
double squaredDist = dx*dx + dy*dy;
if (squaredDist < sumR*sumR) return false;
}
return true; // no existing circle overlaps
}
Edit: corrected minor bugs, and noticed that the question wasn't about C++