2015-04-21 7 views
2

Я делаю проблему, которую я нашел онлайн для практики, и у меня возникли проблемы с определением шага. Моя цель - напечатать 6 концентрических кругов со случайными цветами, используя массив в качестве диаметра.Концентрические круги с использованием случайной центральной точки

Мне удалось получить все, кроме моих кругов, не концентрических и, похоже, просто отвлекаются друг от друга.

Любые идеи?

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Arrays; 
import java.util.Scanner; 
import java.awt.*; 
import java.util.Random; 

public class E3 { 

    public static int [] diameters = new int[6];  

    public static void main(String[] args) throws FileNotFoundException { 
    Scanner console = new Scanner(new File("Practice47.txt")); 
    int panelX = 400, panelY = 400; 
    DrawingPanel panel = new DrawingPanel(panelX, panelY); 
    panel.setBackground(Color.WHITE); 
    Graphics g = panel.getGraphics(); 
    Random r = new Random(); 
    int xCenter = r.nextInt(400); 
    int yCenter = r.nextInt(400); 

    for (int i = 0; i < diameters.length; i++) { 
     diameters[i]=console.nextInt(); 
     g.setColor(new Color(r.nextInt(256),r.nextInt(256), r.nextInt(256))); 
     g.fillOval(xCenter, yCenter, diameters[i], diameters[i]);  
    } 
    for (int i=0;i<diameters.length;i++) 
     System.out.println("diameters["+i+"] = "+ diameters[i]); 
    } 
} 

Вот что мой результат выглядит:

enter image description here

ответ

3

Ваш Fixpoint находится в верхнем левом углу изначально создавался вместо середины кругов. Это происходит потому, что вы указываете прямоугольник для рисования овала внутри с fillOval(leftOffset, topOffset, width, height) и не похожим на вашу программу.

Чтобы исправить это:

  1. рассчитает Fixpoint (x0 | y0) в вашем случае (xCenter | yCenter), так что этот шаг уже сделал
  2. использование fillOval(x0 - d/2, y0 - d/2, d, d) где d является диаметр
Смежные вопросы