Это то, что я хочу выполнить для домашней работы: проектируйте и реализуйте программу, которая рисует круги, с радиусом и расположением каждого круга, определенным случайным образом. Если круг не пересекается с каким-либо другим кругом, нарисуйте этот круг черным цветом. Если круг перекрывает один или несколько кругов, нарисуйте его синим цветом. Используйте массив для хранения представления каждого круга, а затем определите цвет каждого круга. Два круга перекрываются, если расстояние между их центральными точками меньше суммы их радиусов.рисование случайных кругов, сохранение их коориндатов в массиве
Я действительно близко, но я просто не могу понять, как использовать формулу sqrt, чтобы сравнить радиусы окружностей, которые пересекаются, а затем перерисовать этот круг в голубом. Я попытался понять это в двух других сообщениях здесь: drawing random circles, storing their coorindates in an array и здесь: draw random circles, first storing the points in an array. У меня есть некоторые указатели, так может ли кто-нибудь дать мне конкретные указатели, чтобы выяснить, как заставить мой цикл использовать функцию Math.sqrt правильно, чтобы сравнить радиусы, а затем перерисовать перекрывающий круг в голубом? Большое спасибо.
UPDATE: Я получил работу Math.sqrt forumla, но не могу понять, как структурировать цикл for для того, чтобы сделать только перекрывающийся круг. Я попытался сделать это, используя вложенный для цикла с булевым в нем, но это делает все круги заполнены. Спасибо за ваши рекомендации.
Вот код, который я до сих пор:
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 [5]; // radius of each circle
private int[] xArray = new int [5]; //array to store x coordinates of circles
private int[] yArray = new int [5]; //array to store y coordinates of circles
private int x1, x2, y1, y2;
private boolean overlap = false;
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.blue);
setPreferredSize (new Dimension(300, 200));
}
// generates 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 (int j = 0 ;j<xArray.length; j++)
{
//boolean overlap = false;
//is supposed to compare radii of circles to check if they overlap
{
if (Math.sqrt((xArray[i]-xArray[j])*(xArray[i]-xArray[j])+(yArray[i]-yArray[j])*(yArray[i]-yArray[j])) >sizeArray[i]-sizeArray[j]);
boolean overlap = true;
page.fillOval(xArray[i], yArray[i], sizeArray[i], sizeArray[i]);
page.setColor (Color.cyan);
repaint();
} //draws the circles that are stored in the array
page.drawOval(xArray[i], yArray[i], sizeArray[i], sizeArray[i]);//outer for loop
}
}
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.pow вместо (a * a), чтобы сделать его более легким для чтения: Math.sqrt (Math.pow (x1-x2,2) + Math.pow (y1-y2,2)) – Ralph 2010-12-01 22:25:37