2010-11-23 7 views
0

これは宿題のために達成したいものです: ランダムに決定された各円の半径と位置で円を描画するプログラムを設計して実装します。円が他の円と重なっていない場合は、その円を黒で描きます。円が1つ以上の円と重なっている場合は、それをシアンで描画します。配列を使用して各円の表示を保存し、各クランクの色を決定します。中心点間の距離が半径の合計よりも小さい場合は、2つの円が重なります。ここでランダムな円を描画し、まず点を配列に格納する

は、私がこれまで持っているコードです:私が受け取ったアドバイスを取り、ステップによって、このステップを通過しようとした後

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関数を使うことができると思いますが、正しく実装する方法がわかりません。一度チェックする方法を見つけたら、それらが重なっていれば(ブール値が真)、シアンにそのサークルをペイントします。誰かが入力を持っているなら、私は本当に感謝しますが、私は理解しません、私はあまりにも多くの助けを求めるのは良くないと知っています。どうもありがとうございました。

+1

これは宿題のポイントで、自分で仕事をすることです。 –

+1

私はどのように進むのか分かりません。教科書の中で課題と関係があるものをすべて読んだら、教授に尋ねようとしたが、あなたはjavaについて何も知らない誰かを知らないのですか? – Josh

+1

Rツリーを使って各円の交差点を検索することもできます。これがエントリーレベルのクラスであれば、あなたはそれを素朴に行い、他のサークルと交差しているかどうかを確認するためにサークルをペイントするたびにリスト全体を調べるのが最もよいでしょう。 –

答えて

4

私は円の半径のための乱数を生成する方法で失われています....

まず、固定位置と半径1つの円を作成するためのコードを記述します。

次に展開してください:randomGenerator.nextInt()を数回呼び出して、位置と半径のランダムな値を取得します。

次のステップ:10回ループにそれを入れて

次のステップ:あなたは

レシピ再びrandomGenerator.nextInt()からNを取得するループをN回実行します。常に最も簡単な例から始め(どのように行いますとにかくサークルを描くのですか?)。その後、小さなステップでステップを展開します。避けて "私はすべてをすぐにやることができます。"

+0

提案してくれてありがとうございました。私は10回のループが何であるか分かりませんが、私は理解することができると思います。 – Josh

+1

@Josh:10回実行されるループ: 'for(int i = 0; i <10; i ++)' –

+1

+1「ステップごとの小さなステップ」アプローチ –

1

すでにランダムなintを生成しています。これで配列に値を格納する必要があります。

はい、各サークルを他のすべてのサークルと比較して、重複するかどうかを判断してください。

関連する問題