使用随机中心点的同心圆

时间:2015-04-21 23:33:28

标签: java arrays random

我正在做一个我在网上找到练习的问题而且我在找出一个步骤时遇到了麻烦。我的目标是使用数组作为直径打印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

1 个答案:

答案 0 :(得分:3)

您的固定点是最初创建的左上角,而不是圆圈的中间位置。发生这种情况是因为您指定了用fillOval(leftOffset, topOffset, width, height)在其中绘制椭圆形的矩形,而不是在程序中。

要纠正这个问题:

  1. 在您的案例中计算一个固定点(x0 | y0)(xCenter | yCenter),所以此步骤已经完成
  2. 使用fillOval(x0 - d/2, y0 - d/2, d, d) d是直径