2010-11-23 36 views
0

Voici ce que je veux accomplir pour les devoirs: Concevoir et implémenter un programme qui dessine des cercles, avec le rayon et l'emplacement de chaque cercle déterminés au hasard. Si un cercle ne chevauche aucun autre cercle, dessinez ce cercle en noir. Si un cercle chevauche un ou plusieurs cercles, dessinez-le en cyan. Utilisez un tableau pour stocker une représentation de chaque cercle, puis déterminez la couleur de chaque cercle. Deux cercles se chevauchent si la distance entre leurs points centraux est inférieure à la somme de leurs rayons.dessiner des cercles aléatoires, d'abord stocker les points dans un tableau

Voici le code que j'ai jusqu'à présent:

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); 
    } 
} 

Après avoir pris les conseils que je reçus et d'essayer de passer par cette étape par étape, j'ai fait beaucoup de progrès. Je suis coincé sur le dernier bit du projet, qui consiste à comparer les points centraux des cercles à la somme de leurs rayons pour déterminer si les cercles se chevauchent. Je pense que je peux utiliser la fonction math.sqrt pour les comparer, mais je ne suis pas sûr de savoir comment l'implémenter correctement. Je sais qu'une fois que je trouverai comment vérifier, s'ils se chevauchent (un booléen est vrai) alors je peindrai ce cercle dans Cyan. Si quelqu'un a quelque chose à dire, je serais vraiment reconnaissant, mais si je comprends pas, je sais que demander trop d'aide n'est pas bon. Merci beaucoup.

+1

Ceci est le point de devoirs, pour faire le travail vous-même. –

+1

Je ne sais pas comment procéder. Que feriez-vous si vous aviez lu dans votre livre tout ce qui avait trait à la tâche, vous aviez essayé de le demander à votre professeur et vous ne connaissez personne qui sait quoi que ce soit au sujet de Java? – Josh

+1

Vous pouvez également utiliser un arbre R pour rechercher des intersections pour chaque cercle. S'il s'agit d'une classe de niveau d'entrée, vous feriez probablement mieux de le faire naïvement et de parcourir toute la liste à chaque fois que vous dessinez un cercle pour voir s'il croise d'autres cercles. –

Répondre

4

Je suis perdu sur la façon de générer des nombres aléatoires pour les rayons des cercles ....

D'abord, écrire le code pour créer un cercle avec une position fixe et le rayon. Ensuite, développez cela: Appelez randomGenerator.nextInt() plusieurs fois pour obtenir des valeurs aléatoires pour la position et le rayon.

Étape suivante: Mettez cela dans une boucle 10 fois

Étape suivante: Exécutez les temps boucle N où vous obtenez N de randomGenerator.nextInt() à nouveau

Recette: Commencez toujours par l'exemple le plus simple (comment faire Je dessine des cercles de toute façon?). Puis développez-le étape par étape minuscule. Évitez "Je peux tout faire à la fois."

+0

Merci pour les suggestions, je ne suis pas sûr de ce qu'est une boucle de 10 fois, mais je pense que je serai en mesure de comprendre. – Josh

+1

@Josh: Une boucle qui s'exécute 10 fois: 'pour (int i = 0; i <10; i ++)' –

+1

+1 pour l'approche "étape par étape minuscule" –

1

Vous générez déjà un int int. Vous devez maintenant stocker la (les) valeur (s) dans votre tableau. Oui, il suffit de comparer chaque cercle à tous les autres pour déterminer s'il se chevauche.