Java 使用随机设置绘制一系列同心圆
我真的被困在如何编程上了。需要在以下条件下使用Java drawArc方法绘制一系列8个同心圆 使用导入java.util.Random库Java 使用随机设置绘制一系列同心圆,java,swing,jpanel,java-2d,paintcomponent,Java,Swing,Jpanel,Java 2d,Paintcomponent,我真的被困在如何编程上了。需要在以下条件下使用Java drawArc方法绘制一系列8个同心圆 使用导入java.util.Random库 提供在随机位置(即x-y)开始绘制图纸 cooridinate必须随机计算) 为每个圆提供随机颜色 为每个圆提供一个随机直径 我当前的代码能够为每个圆获得随机颜色,但不清楚如何满足其他随机条件 // Exercise 12.6 Solution: CirclesJPanel.java // This program draws concentric circ
// Exercise 12.6 Solution: CirclesJPanel.java
// This program draws concentric circles
import java.awt.Graphics;
import javax.swing.JPanel;
public class ConcentricCircles extends JPanel
{
// draw eight Circles separated by 10 pixels
public void paintComponent( Graphics g )
{
Random random = new Random();
super.paintComponent( g );
// create 8 concentric circles
for ( int topLeft = 0; topLeft < 80; topLeft += 10 )
{
int radius = 160 - ( topLeft * 2 );
int r = random.nextInt(255);
int gr = random.nextInt(255);
int b = random.nextInt(255);
Color c = new Color(r,gr,b);
g.setColor(c);
g.drawArc( topLeft + 10, topLeft + 25, radius, radius, 0, 360 );
} // end for
}
}
// This program draws concentric circles
import javax.swing.JFrame;
public class ConcentricCirclesTest extends JFrame {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame frame=new JFrame("Concentric Circles");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ConcentricCircles cCirclesJPanel = new ConcentricCircles();
frame.add(cCirclesJPanel);
frame.setSize(200,250);
frame.setVisible(true);
}//end main
}
//练习12.6解决方案:CirclesJPanel.java
//这个程序画同心圆
导入java.awt.Graphics;
导入javax.swing.JPanel;
公共类同心圆扩展JPanel
{
//画八个圆圈,间隔10像素
公共组件(图形g)
{
随机=新随机();
超级组件(g);
//创建8个同心圆
对于(int-topLeft=0;topLeft<80;topLeft+=10)
{
整数半径=160-(左上角*2);
int r=random.nextInt(255);
int gr=random.nextInt(255);
int b=随机的.nextInt(255);
颜色c=新颜色(r、gr、b);
g、 setColor(c);
g、 牵引弧(左上+10,左上+25,半径,半径,0,360);
}//结束
}
}
//这个程序画同心圆
导入javax.swing.JFrame;
公共类同心圆测试扩展JFrame{
/**
*@param args
*/
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
JFrame=新的JFrame(“同心圆”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
同心圆cCirclesJPanel=新同心圆();
frame.add(cCirclesJPanel);
框架.设置尺寸(200250);
frame.setVisible(true);
}//端干管
}
这类练习的关键在于以下几点:
- 从圆圈数和步长的常数开始;特别是随机数生成器只需要创建一次
private static final int N = 8; private static final int S = 32; private static Random random = new Random();
- 选择坐标位于绘图区域内的随机点
// a random point inset by S int x = random.nextInt(getWidth() - S * 2) + S; int y = random.nextInt(getHeight() - S * 2) + S;
- 对于每个圆,找到直径作为
的函数,添加一个步长的随机分数,并在所选点偏移半径处渲染圆弧S
for (int i = 0; i < N; i++) { g2d.setColor(…); int d = (i + 1) * S + random.nextInt(S / 2); int r = d / 2; g2d.drawArc(x - r, y - r, d, d, 0, 360); }
- 替代以建立图形面板的大小
private static final int W = S * 12; private static final int H = W; … @Override public Dimension getPreferredSize() { return new Dimension(W, H);
- 另见
这类练习的关键在于以下几点:
- 从圆圈数和步长的常数开始;特别是随机数生成器只需要创建一次
private static final int N = 8; private static final int S = 32; private static Random random = new Random();
- 选择坐标位于绘图区域内的随机点
// a random point inset by S int x = random.nextInt(getWidth() - S * 2) + S; int y = random.nextInt(getHeight() - S * 2) + S;
- 对于每个圆,找到直径作为
的函数,添加一个步长的随机分数,并在所选点偏移半径处渲染圆弧S
for (int i = 0; i < N; i++) { g2d.setColor(…); int d = (i + 1) * S + random.nextInt(S / 2); int r = d / 2; g2d.drawArc(x - r, y - r, d, d, 0, 360); }
- 替代以建立图形面板的大小
private static final int W = S * 12; private static final int H = W; … @Override public Dimension getPreferredSize() { return new Dimension(W, H);
- 另见
从谷歌搜索“java随机数”开始,我可以得到每个圆的随机颜色,但不清楚如何接近半径和x,y坐标。想想哪些变量决定x,y坐标和半径。给这些变量分配随机值。嗯!。当我为x、y和半径设置随机值时,输出的似乎是分散的圆。我的理解是同心圆应该有一个共同的中心,我不知道如何在程序中反映这一点。你只为一个圆设置随机的x,y坐标。所有其他人都会使用相同的方法。通过谷歌搜索“java随机数”,我可以得到每个圆的随机颜色,但不清楚如何接近半径和x,y坐标。想想哪些变量决定x,y坐标和半径。给这些变量分配随机值。嗯!。当我为x、y和半径设置随机值时,输出的似乎是分散的圆。我的理解是同心圆应该有一个共同的中心,我不知道如何在程序中反映这一点。你只为一个圆设置随机的x,y坐标。所有其他人都会使用相同的颜色。我一定会尝试一下,因为我想在开始时为所有
JPanel
s随机设置一种颜色,尽管到目前为止我正在使用new Color(random.nextInt(256),…)
,尽管这种新东西看起来更有希望(希望它也能处理alpha部分,因为我总是忽略这一点)我一定会尝试一下,因为我想在一开始就为所有JPanel
s随机设置一个颜色,尽管到目前为止我使用的是新颜色(random.nextInt(256),…)
,尽管这个新东西看起来更有希望(希望它也能处理alpha部分,因为我总是忽略它)