Все эти магические числа заставляют меня немного съеживаться. Вы новичок в Java, и это домашнее задание, поэтому я понимаю, почему вы это делаете, но я бы не советовал, если вы будете много программировать в будущем.
Вам нужен алгоритм или рецепт, чтобы решить, когда маленький круг внутри выходит за пределы большого круга, который вы пытаетесь упаковать. Подумайте, как вы можете это сделать:
- Если расстояние между центром большого круга и маленьким кругом больше, чем разница в их радиусах, маленький круг будет перекрывать большой круг или полностью падать за его пределы.
Вы можете добавить эту проверку к своему коду: непосредственно перед тем, как нарисовать круг, выполните эту проверку. Нарисуйте, только если этот круг пройдет.
Не беспокойтесь о Java на секунду; нарисуйте на листе бумаги рисунок, нарисуйте этот замкнутый и упакованный кружок и посмотрите, правильно ли это утверждение. Затем подумайте о любых угловых ситуациях, которые он может не охватить, просто как проверку.
Я сделаю еще две рекомендации. Во-первых, сделайте это вручную без компьютера один раз, чтобы увидеть, как может выглядеть «правильный» ответ. Во-вторых, посмотрите, можете ли вы отделить расчет кругов от чертежной части. Это может облегчить вашу работу, потому что вы можете сосредоточиться на одной вещи за раз. Это называется "разложение". Вы решаете сложные проблемы, разбивая их на более мелкие, более управляемые части. В этом случае это также называется «разделение вида модели». Возможно, вам когда-нибудь придется это знать.
Возможно, еще один способ подумать об этой проблеме - представить двумерное расположение окружностей, упакованных в их ближайшем расположении, простирающихся до бесконечности как в x-, так и в y-направлениях. Теперь возьмите свой окружающий круг, поместите его поверх 2D-схемы и удалите все круги, которые перекрывают большой круг. Я не знаю, будет ли это оптимальным, но это легко визуализировать.