Java 在两点之间画正方形

Java 在两点之间画正方形,java,Java,我正在做一些练习,我已经在这上面呆了好几个小时了(对Java来说是很新的)。 不管怎样,这就是我应该做的: 当我运行程序时,我会在屏幕中间有一个正方形,然后当我点击屏幕中的某个地方时,在我点击的地方画出另一个正方形,在这两个点之间应该有10个正方形。因此,无论我在哪里单击,都应该在它们之间绘制10个正方形 然而,我不能使它正常工作 到目前为止,我已经做到了这一点: import se.lth.cs.ptdc.window.SimpleWindow; import se.lth.cs.ptdc

我正在做一些练习,我已经在这上面呆了好几个小时了(对Java来说是很新的)。 不管怎样,这就是我应该做的: 当我运行程序时,我会在屏幕中间有一个正方形,然后当我点击屏幕中的某个地方时,在我点击的地方画出另一个正方形,在这两个点之间应该有10个正方形。因此,无论我在哪里单击,都应该在它们之间绘制10个正方形

然而,我不能使它正常工作

到目前为止,我已经做到了这一点:

import se.lth.cs.ptdc.window.SimpleWindow;  
import se.lth.cs.ptdc.square.Square;


public class PrintSquares2 {


public static void main(String[] args) {
    SimpleWindow w = new SimpleWindow(600, 600, "PrintSquares2");
    int posX = 300;
    int posY = 300;
    int loop = 0;
    System.out.println("Skriv rotation");
    Square sq1 = new Square(posX,posY,200);
    sq1.draw(w);


            w.waitForMouseClick();
            int destX = w.getMouseX();
            int destY = w.getMouseY();
            System.out.println("Dest X: " + destX + " Dest Y: " + destY);
            System.out.println("Pos X: " + posX + " Pos Y: " + posY);
            SimpleWindow.delay(10);
            //sq1.erase(w);
            int jumpX = (destX - posX) / 10;
            int jumpY = (destY - posY) / 10;
            System.out.println(jumpX);


                while (posX < destX)
                {       
                    posX = posX+10;
                    SimpleWindow.delay(100);
                    loop++;
                    System.out.println("Loop: " + loop);
                    System.out.println("Dest X: " + destX + " Dest Y: " + destY);
                    System.out.println("Pos X: " + posX + " Pos Y: " + posY);       
                    Square sq2 = new Square(posX,posY,200);         
                    sq2.draw(w);                        
                }

                while (posX > destX)
                {
                    posX = posX-10;
                    SimpleWindow.delay(100);
                    loop++;
                    System.out.println("Loop: " + loop);
                    System.out.println("Dest X: " + destX + " Dest Y: " + destY);
                    System.out.println("Pos X: " + posX + " Pos Y: " + posY);
                    sq1.draw(w);
                    Square sq2 = new Square(posX,posY,200);         
                    sq2.draw(w);
                }

                while (posY < destY)
                {       
                    posY = posY+10;
                    SimpleWindow.delay(100);
                    loop++;
                    System.out.println("Loop: " + loop);
                    System.out.println("Dest X: " + destX + " Dest Y: " + destY);
                    System.out.println("Pos X: " + posX + " Pos Y: " + posY);
                    sq1.draw(w);
                    Square sq2 = new Square(posX,posY,200);         
                    sq2.draw(w);
                }

                while (posY > destY)
                {
                    posY = posY-10;
                    SimpleWindow.delay(100);
                    loop++;
                    System.out.println("Loop: " + loop);
                    System.out.println("Dest X: " + destX + " Dest Y: " + destY);
                    System.out.println("Pos X: " + posX + " Pos Y: " + posY);
                    sq1.draw(w);
                    Square sq2 = new Square(posX,posY,200);         
                    sq2.draw(w);
                }


            SimpleWindow.delay(10);
            sq1.draw(w);

            //SimpleWindow.clear(w);


    }
导入se.lth.cs.ptdc.window.SimpleWindow;
导入se.lth.cs.ptdc.square.square;
公共类PrintSquares2{
公共静态void main(字符串[]args){
SimpleWindow=newsimplewindow(600600,“PrintSquares2”);
int posX=300;
int-posY=300;
int循环=0;
System.out.println(“Skriv旋转”);
Square sq1=新的Square(posX,posY,200);
sq1.图纸(w);
w、 waitForMouseClick();
int destX=w.getMouseX();
int destY=w.getMouseY();
系统输出打印项次(“目的地X:+目的地X+”目的地Y:+目的地Y”);
系统输出打印项次(“位置X:+posX+”位置Y:+posY);
简单延时(10);
//sq1.擦除(w);
int-jumpX=(destX-posX)/10;
int jumpY=(destY-posY)/10;
系统输出打印LN(jumpX);
while(posXdestX)
{
posX=posX-10;
简单延时(100);
loop++;
System.out.println(“循环:“+Loop”);
系统输出打印项次(“目的地X:+目的地X+”目的地Y:+目的地Y”);
系统输出打印项次(“位置X:+posX+”位置Y:+posY);
sq1.图纸(w);
Square sq2=新的Square(posX,posY,200);
sq2.图纸(w);
}
while(posYdestY)
{
posY=posY-10;
简单延时(100);
loop++;
System.out.println(“循环:“+Loop”);
系统输出打印项次(“目的地X:+目的地X+”目的地Y:+目的地Y”);
系统输出打印项次(“位置X:+posX+”位置Y:+posY);
sq1.图纸(w);
Square sq2=新的Square(posX,posY,200);
sq2.图纸(w);
}
简单延时(10);
sq1.图纸(w);
//简单内点清晰(w);
}
}

我很确定我把一切都复杂化了,因为这应该是非常基本的

最终结果应该是这样的:
这是我解决问题的方法:

我不太理解se.lth.cs.ptdc.square.square上的文档,但我假设它根据左上角的坐标和边长绘制了一个正方形

你有第一个正方形左上角的坐标和最后一个正方形中心的坐标。这样就不难得到最后一个正方形左上角的坐标:
lastX=centerX-side/2

lastY=centry-side/2

完成后,您会发现起点和终点之间的差异:
diffX=posX-lastX

diffY=posY-lastY

然后再画9个方块:

for (int i=1; i<10; i++){
    squareX = posX + (diffX/10)*i;
    squareY = posY + (diffY/10)*i;
    Square square = new Square(squareX,squareY,200);         
    square.draw(w);
}

for(int i=1;i同时更新X和Y:

    int jumpX = (destX - posX) / 10;
    int jumpY = (destY - posY) / 10;
    if (posX > destX) {
        int temp = destX;
        destX = posX;
        posX = temp;
    }

    while (posX <= destX)
    {       
            SimpleWindow.delay(100);
            loop++;
            System.out.println("Loop: " + loop);
            System.out.println("Dest X: " + destX + " Dest Y: " + destY);
            System.out.println("Pos X: " + posX + " Pos Y: " + posY);       
            Square sq2 = new Square(posX,posY,200);         
            sq2.draw(w);                        
            posX = posX+jumpX;
            posY = posY+jumpY;
    }    

    SimpleWindow.delay(10);
    sq1.draw(w);
intjumpx=(destX-posX)/10;
int jumpY=(destY-posY)/10;
如果(posX>destX){
int temp=destX;
destX=posX;
posX=温度;
}

while(posX以下是您如何同时向两个方向移动(在对角线上)

static final int Steps=10;
专用无效测试(){
int-x1=100;
int y1=100;
int x2=300;
int y2=500;
双dx=(双)(x2-x1)/(双)步;
双dy=(双)(y2-y1)/(双)步;
双x=x1;
双y=x2;
对于(int i=0;i
您当前得到的结果是什么?您是否在某个地方得到了异常?这是目前的情况。它首先在x轴上移动,然后在y轴上移动。似乎每个新的正方形都在水平和垂直方向上移动,而图像中的每个正方形要么在水平方向上移动,要么在垂直方向上移动,但永远不会同时移动。抱歉,t他回答晚了,不得不去听我的数学课,然后坐火车回家。我尝试了上面的代码,并对它做了一些轻微的修改,但我有一个小问题。每当我点击原始正方形的右侧时,动画就会偏移,但它仍然循环正确的次数。参见
static final int Steps = 10;

private void test() {
  int x1 = 100;
  int y1 = 100;
  int x2 = 300;
  int y2 = 500;

  double dx = (double)(x2 - x1) / (double) Steps;
  double dy = (double)(y2 - y1) / (double) Steps;

  double x = x1;
  double y = x2;
  for ( int i = 0; i < Steps; i++) {
    // Simulate the drawing of the square.
    System.out.println("("+x+","+y+")");
    x += dx;
    y += dy;
  }
}