使用随机中心点的同心圆
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)
指定了要在其中绘制椭圆的矩形,而不是像在您的程序中那样。
要更正此问题:
- 根据您的情况 (
xCenter
|yCenter
) 计算固定点 (x0
|y0
),因此此步骤已经完成
- 使用
fillOval(x0 - d/2, y0 - d/2, d, d)
其中 d
是直径
我正在做一个我在网上找到的练习题,但我无法找出一个步骤。我的目标是打印 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)
指定了要在其中绘制椭圆的矩形,而不是像在您的程序中那样。
要更正此问题:
- 根据您的情况 (
xCenter
|yCenter
) 计算固定点 (x0
|y0
),因此此步骤已经完成 - 使用
fillOval(x0 - d/2, y0 - d/2, d, d)
其中d
是直径