【问题标题】:Concentric circles using a random center point使用随机中心点的同心圆
【发布时间】:2015-06-29 08:54:41
【问题描述】:

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

我的输出如下所示:

【问题讨论】:

    标签: java arrays random


    【解决方案1】:

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

    要纠正这个问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      相关资源
      最近更新 更多