рисовать случайные круги, сначала сохраняя точки в массиве - PullRequest
0 голосов
/ 23 ноября 2010

Вот что я хочу сделать для домашней работы: Разработайте и внедрите программу, которая рисует круги, радиус и местоположение каждого круга определяются случайным образом. Если круг не совпадает ни с одним другим кругом, нарисуйте этот круг черным цветом. Если круг перекрывает один или несколько кругов, нарисуйте его голубым. Используйте массив для хранения представления каждого круга, затем определите цвет каждого круга. Два круга перекрываются, если расстояние между их центральными точками меньше суммы их радиусов.

Вот код, который у меня есть:

import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.*;
import java.math.*;

public class RandomCircles extends JPanel
{
    private int[] sizeArray = new int [4];  // radius of each circle
    private int[] xArray = new int [4]; //array to store x coordinates of circles
    private int[] yArray = new int [4]; //array to store y coordinates of circles


    public RandomCircles()
    {
        Random r = new Random();

        for (int i = 0; i<xArray.length; i++){
            //random numbers from 1 to 20;
            xArray[i] = r.nextInt(200) + 1;
        }
        for (int i = 0; i<yArray.length; i++){
            yArray[i] = r.nextInt(200) + 1;
        }
        for (int i = 0; i<sizeArray.length; i++){
            sizeArray[i] = r.nextInt(100) +1;
        }

        setBackground (Color.white);
        setPreferredSize (new Dimension(300, 200));
    }

    //  Draws all of the circles stored in the array.

    public void paintComponent (Graphics page)
    {
        super.paintComponent(page);
        for (int i = 0 ;i<xArray.length; i++) //this is an iterator that draws the circles and checks for overlapping radii
        {
            for (math.sqrt((x1-x2)*((x1-x2))-((y1-y2)*(y1-y2));
            {//math.sqrt((x1-x2)*(x1-x2)-(y1-y2)*(y1-y2)), go back and read chapter 7
                page.fillOval(xArray[i], yArray[i], sizeArray[i], sizeArray[i]);
            }
        }
    }
    public static void main (String[] args)
    {
        JFrame frame = new JFrame ("Circles");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().add (new RandomCircles());

        frame.pack();
        frame.setVisible(true);
    }
}

После того, как я принял полученный совет и попытался пройти этот шаг за шагом, я добился большого прогресса. Я застрял в последней части проекта, которая заключается в сравнении центральных точек окружностей с суммой их радиусов, чтобы определить, перекрываются ли окружности. Я думаю, что я могу использовать функцию math.sqrt, чтобы сравнить их, но я не уверен, как правильно ее реализовать. Я знаю, что как только я выясню, как проверить, перекрываются ли они (логическое значение истинно), я нарисую этот круг в Cyan. Если у кого-то есть какой-либо вклад, я был бы очень признателен, но я понимаю, если нет, я знаю, что просить слишком много помощи не хорошо. Большое спасибо.

Ответы [ 2 ]

4 голосов
/ 23 ноября 2010

Я заблудился о том, как генерировать случайные числа для радиусов окружностей ....

Сначала напишите код, чтобы создать один круг с фиксированной позицией и радиусом.

Затем остановимся на этом: вызовите randomGenerator.nextInt() пару раз, чтобы получить случайные значения для позиции и радиуса.

Следующий шаг: поместите это в 10-кратный цикл

Следующий шаг: Запустите цикл N раз, где вы снова получите N из randomGenerator.nextInt()

Рецепт: Всегда начинайте с самого простого примера (как в любом случае рисовать круги?).Затем расширьте его шаг за шагом.Избегайте "Я могу сделать все сразу".

1 голос
/ 23 ноября 2010

Вы уже генерируете случайный int. Теперь вам нужно сохранить значения в вашем массиве.

Да, просто сравните каждый круг со всеми остальными, чтобы определить, перекрывается ли он.

...