Un peu d'aide sur un programme Java pour dessiner un arc-en-ciel

Je vais être franc à ce sujet; c'est un devoir à la maison, mais quelqu'un peut-il me guider dans la bonne direction et m'expliquer comment certaines parties du code sont censés travailler? Les directions sont ci-dessous le code et les questions.

C'est mon code pour l'instant:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Rainbow extends JPanel
{
//Declare skyColor:
private final Color skyColor = Color.CYAN;
public Rainbow()
{
setBackground(skyColor);
} 
//Draws the rainbow.
public void paintComponent(Graphics g)
{
super.paintComponent(g);
int width = getWidth();    
int height = getHeight();
//Declare and initialize local int variables xCenter, yCenter
//that represent the center of the rainbow rings:
int xCenter = width/2;
int yCenter = (height * 3) /4;
//Declare and initialize the radius of the large semicircle:
int largeRadius = width/4;
g.setColor(Color.RED);
//Draw the large semicircle:
g.fillArc(xCenter,yCenter,largeRadius,height,0,180);
//Declare and initialize the radii of the small and medium
//semicircles and draw them:
int smallRadius = height/4;
g.setColor(Color.MAGENTA);
g.fillArc(xCenter,yCenter,width,height,0,180);
int mediumRadius = (int) Math.sqrt(smallRadius * largeRadius);
g.setColor(Color.GREEN);
g.fillArc(xCenter,yCenter,width,height,0,180);
//Calculate the radius of the innermost (sky-color) semicircle
//so that the width of the middle (green) ring is the
//arithmetic mean of the widths of the red and magenta rings:
//Draw the sky-color semicircle:
g.fillArc(xCenter,yCenter,width,height,0,180);
}
public static void main(String[] args)
{
JFrame w = new JFrame("Rainbow");
w.setBounds(300, 300, 300, 200);
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = w.getContentPane();
c.add(new Rainbow());
w.setVisible(true);
}
}

Mes questions: Comment fonctionne exactement fillArc travail; je comprends ce qui se passe dans le paramètre, mais que doit-on faire de sorte que chaque arc diffère de l'un à l'autre?
Comment peut-on définir une couleur pour chaque arc? J'ai essayé de le faire, et j'ai fini avec la couleur énumérées plus proche de la fin en montrant et en remplaçant les autres.
Je vais probablement avoir plus tant que je continue à code.

Ces directions:

![entrez la description de l'image ici][1]

“Arc-en-ciel” est composé de quatre demi-cercles qui se chevauchent. L'anneau extérieur est rouge (la Couleur.ROUGE), celui du milieu est vert (la Couleur.En VERT), et la bague intérieure a la couleur magenta (Couleur.MAGENTA). Au plus profond du demi-cercle a la même couleur que l'arrière-plan.

Suivez les instructions ci-dessous et de remplir les espaces vides dans Rainbow.java.

  1. Démarrer le projet arc-en-ciel.

  2. Ajoutez un commentaire d'en-tête avec vos nom, avant la déclaration de la classe dans le haut du fichier.

  3. Ajouter à l'arc-en-ciel de la classe une déclaration de finale privée champ skyColor du type de Couleur, initialisé à la Couleur.CYAN (la couleur du ciel). Dans l'arc-en-ciel du constructeur, la fenêtre de l'arrière-plan de skyColor plutôt que la Couleur.BLANC.

  4. Dans la méthode de peinture, de déclarer local des variables de type entier xCenter et yCenter que représentent les coordonnées du centre des anneaux. Les initialiser à 1/2 3/4 de la largeur et de la hauteur (vers le bas) de la fenêtre de contenu, respectivement. (Rappelons que l'origine des coordonnées graphiques en Java, dans le coin supérieur gauche de la fenêtre de contenu avec l'axe des y vers le bas.) Ne branchez pas des numéros fixes à partir de la fenêtre de dimensions.

  5. Déclarer une variable locale largeRadius que représente le rayon de la plus grande (rouge) demi-cercle et l'initialiser à 1/4 de la largeur.

  6. Un appel de méthode.g.fillArc(x, y, taille, taille, d', degrés) (avec tous les arguments entiers) dessine un secteur de cercle. x et y sont les coordonnées du coin supérieur gauche du rectangle (dans ce cas un carré) dans lequel l'ovale est (logiquement) inscrit; la taille est du côté de la place (et le diamètre du cercle); de est le point de départ de l'arc en degrés (de 0 à le point le plus oriental de la partie horizontale de diamètre), et les degrés (un nombre positif) est la mesure de l'arc, va dans le sens antihoraire. Ajouter une déclaration à la méthode de peinture pour attirer le plus grand (rouge) demi-cercle. Tester votre programme.

  7. Ajouter pour afficher la moyenne (vert) et les petits (magenta) en demi-cercles. Le rayon du demi-cercle magenta doit être de 1/4 de la hauteur. Le rayon de la verte devrait être la moyenne géométrique (la racine carrée du produit du rayon du demi-cercle rouge et le rayon du demi-cercle magenta, arrondi à l'entier le plus proche. (Un appel aux Mathématiques.sqrt(x) renvoie la valeur de la racine carrée de x, d'un lit double.) Un nouveau test de programme.

  8. Ajouter déclarations d'affichage au plus profond du demi-cercle de l'arrière-plan (“ciel”) couleur pour terminer l'arc-en-ciel. Utiliser le skyColor constante pour cette demi-cercle de couleur. Choisissez le rayon du ciel-couleur-cercle, de telle manière que la largeur de la moyenne (vert) de l'anneau est la moyenne arithmétique des largeurs de le rouge et le magenta anneaux.

  9. Tester votre programme.

  10. Soumettre votre programme et l'exécuter de sortie. Votre course de sortie (l'arc-en-ciel de l'image) peut être inclus par la capture de la sortie de l'écran (Alt-PrintScrn), de la coller dans un logiciel de graphisme (comme MS Paint) et puis enregistrer l'image sur votre projet Eclipse répertoire.

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Container;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    public class Rainbow extends JPanel
    {
    //Declare skyColor:
    private final Color skyColor = Color.CYAN;
    public Rainbow()
    {
    setBackground(skyColor);
    }
    //Draws the rainbow.
    public void paintComponent(Graphics g)
    {
    super.paintComponent(g);
    int width = getWidth();    
    int height = getHeight();
    //Declare and initialize local int variables xCenter, yCenter
    //that represent the center of the rainbow rings:
    int xCenter = width/2;
    int yCenter = (height * 3) /4;
    //Declare and initialize the radius of the large semicircle:
    int largeRadius = width/4;
    g.setColor(Color.RED);
    //Draw the large semicircle:
    g.fillArc(xCenter - largeRadius,yCenter - largeRadius   ,largeRadius,largeRadius,0,180);
    //Declare and initialize the radii of the small and medium
    //semicircles and draw them:
    int smallRadius = height/4;
    int mediumRadius = (int) Math.sqrt(smallRadius * largeRadius);
    g.setColor(Color.GREEN);
    g.fillArc(xCenter-(largeRadius+mediumRadius)/2,yCenter-          (largeRadius+mediumRadius)/2,mediumRadius,mediumRadius,0,180);
    g.setColor(Color.MAGENTA);
    g.fillArc(xCenter-(largeRadius+smallRadius)/2,yCenter-(largeRadius+smallRadius)/2,smallRadius,smallRadius,0,180);
    //Calculate the radius of the innermost (sky-color) semicircle
    //so that the width of the middle (green) ring is the
    //arithmetic mean of the widths of the red and magenta rings:
    int skyRadius = (int)((2 * Math.sqrt(smallRadius * largeRadius)) - width/4);
    //Draw the sky-color semicircle:
    g.setColor(skyColor);
    g.fillArc(xCenter-skyRadius,yCenter-skyRadius,skyRadius,skyRadius,0,180);
    }
    public static void main(String[] args)
    {
    JFrame w = new JFrame("Rainbow");
    w.setBounds(300, 300, 300, 200);
    w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container c = w.getContentPane();
    c.add(new Rainbow());
    w.setVisible(true);
    }
    }
Le contraste des couleurs sur votre capture d'écran est prise de mal de mes yeux ...
Vous avez une question à propos de quelque chose de spécifique que vous ne comprenez pas?

OriginalL'auteur user1629075 | 2012-10-04