使用随机中心点的同心圆

Concentric circles using a random center point

我正在做一个我在网上找到的练习题,但我无法找出一个步骤。我的目标是打印 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]);
  }
}

这是我的输出结果:

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

要更正此问题:

  1. 根据您的情况 (xCenter|yCenter) 计算固定点 (x0|y0),因此此步骤已经完成
  2. 使用 fillOval(x0 - d/2, y0 - d/2, d, d) 其中 d 是直径