Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内有对称正方形的随机正方形_Java_Random_Graphics_Jframe_Paint - Fatal编程技术网

Java 内有对称正方形的随机正方形

Java 内有对称正方形的随机正方形,java,random,graphics,jframe,paint,Java,Random,Graphics,Jframe,Paint,因此,我必须画4个正方形,然后在每个正方形内画10个随机正方形,带有随机的x和y坐标,它们必须对称,然后用它们并排画整个屏幕。每个部分(4个大正方形为一个部分)必须具有相同的随机正方形和相同的颜色。我已经到了一个地步,我可以画一个单一的部分,但我想不出任何东西,使他们被画了一遍又一遍,所以他们涵盖了整个屏幕相同的随机方块和随机颜色。希望你能理解。这是我现在拥有的 @Override public void paint(Graphics g){ int a=100; Random

因此,我必须画4个正方形,然后在每个正方形内画10个随机正方形,带有随机的x和y坐标,它们必须对称,然后用它们并排画整个屏幕。每个部分(4个大正方形为一个部分)必须具有相同的随机正方形和相同的颜色。我已经到了一个地步,我可以画一个单一的部分,但我想不出任何东西,使他们被画了一遍又一遍,所以他们涵盖了整个屏幕相同的随机方块和随机颜色。希望你能理解。这是我现在拥有的

@Override
public void paint(Graphics g){
    int a=100;
    Random rand = new Random();
    g.setColor(Color.black);
    g.drawRect(50, 50, a, a);
    g.drawRect(50+a, 50, a, a);
    g.drawRect(50, 50+a, a, a);
    g.drawRect(50+a, 50+a, a, a);
    int r = rand.nextInt(a/2);
    int rx = rand.nextInt(a/2)+50;
    int ry = rand.nextInt(a/2)+50;
    int rxsim = (2*a+50)-(rx-50)-r;
    int rysim = (2*a+50)-(ry-50)-r;
    g.setColor(new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255)));
    g.fillRect(rx, ry, r, r);
    g.fillRect(rxsim, ry, r, r);
    g.fillRect(rx, rysim, r, r);
    g.fillRect(rxsim, rysim, r, r); 
}

您可以测量屏幕(或框架,无论什么)的大小和矩形的大小

int widthScreen = getWidth();//TODO implement this
int widthSample = getSampleWidth();//TODO implement that (looks like 50 in your code)
一旦你知道了你的尺寸,你就可以计算:

int amountHorizontal = widthScreen / widthSample + 1; //adding one extra
当然,你也必须对amountVertical做同样的操作,这是相同的技术

然后画dx/dy倍

Graphics g; //your graphics to draw on
Rectangle r; //a rectanlge to be drawn
for(int dy = 0; dy < amountHorizontal; dy++){
    for(int dx = 0; dx < amountHorizontal; dx++){
        if(dx%2 == 0 && dy%2 == 0){ //even & even
            drawUpperLeft(r, dx, dy, g)
        }
        if(dx%2 != 0 && dy%2 == 0){ //odd & even
            drawUpperRight(r, dx, dy)
        }
        if(dx%2 == 0 && dy%2 != 0){ //even & odd
            drawLowerLeft(r, dx, dy)
        }
        if(dx%2 != 0 && dy%2 != 0){ //odd & odd
            drawLowerRight(r, dx, dy)
        }
    }
}

你能不能提供一张能更详细地解释你的问题的图片?@SaraSeppola我有它,但需要让它看起来像
private void drawLowerRight(Rectangle r, int xOff, int yOff, Graphics g){

    //you already know how to rotate a rectangle by 90/180/270 degree
    Rectangle rot = createRectanlge(r, 270); 

    int x = xOff * widthSample;
    int y = yOff * widthSample;

    rot.x = rot.x + xOff;       
    rot.y = rot.y + yOff; 

    g.drawRect(rot);
}