关于使用中心坐标创建圆的输入

时间:2014-03-18 10:18:23

标签: java arrays input graphics drawing

你好我得到了一个任务,我必须使用他们的中心坐标和用户输入的半径绘制3个圆圈。赋值具体说明我必须输入中心和半径,我不能分别输入x和y坐标。它们必须作为坐标对(x,y)输入。 这是我的代码。

import java.util.*;
import java.awt.*;

public class Circles {

static Scanner CONSOLE = new Scanner(System.in);

public static final int PANEL_HEIGHT = 300;
public static final int PANEL_WIDTH = 400;

public static void main (String [] args) {

DrawingPanel panel = new DrawingPanel (PANEL_HEIGHT,PANEL_WIDTH);
Graphics g = panel.getGraphics();
System.out.println();

System.out.println("Red Circle data");
System.out.println("Input center of Red circle: ");
   int center1 = CONSOLE.nextInt();
System.out.println("Input radius of Red circle: ");
   int radius1 = CONSOLE.nextInt();
System.out.println();

System.out.println("Blue Circle data");
System.out.println("Input center of Blue circle: ");
   int center2 = CONSOLE.nextInt();
System.out.println("Input radius of Blue circle: ");
   int radius2 = CONSOLE.nextInt();
System.out.println();

System.out.println("Green Circle data");
System.out.println("Input center of Green circle: ");
   int center3 = CONSOLE.nextInt();
System.out.println("Input radius of Green circle: ");
   int radius3 = CONSOLE.nextInt();

g.setColor(Color.RED);
g.fillOval(center1 -radius1 ,center1-radius1 ,radius1 ,radius1);

g.setColor(Color.BLUE);
g.fillOval(center2 -radius2 ,center2-radius2 ,radius2 ,radius2);

g.setColor(Color.GREEN);
g.fillOval(center3 -radius3 ,center3-radius3 ,radius3 ,radius3);


    }
}    

我的问题是我不知道如何正确输入和存储x和y坐标作为一个int。因为它目前只需要一个数据点,存储它,并将其用作x和y。

System.out.println("Red Circle data");
System.out.println("Input center of Red circle: ");
   int center1 = CONSOLE.nextInt();

这里我知道java必须要求值并存储它们。

g.setColor(Color.RED);
g.fillOval(center1(THIS SHOULD BE THE X VALUE) -radius1 ,center1(THIS SHOULD BE THE Y VALUE)-radius1 ,radius1 ,radius1);

然后在这里我必须以某种方式获取存储在上面代码中的值。

请帮助我对此有点新意,并希望得到一些反馈!希望我要求的是有道理的! :S

1 个答案:

答案 0 :(得分:0)

不是JAVA编码器,所以我坚持使用C ++,你确定要在单个int中使用x,y对吗?

1. 如果是,则只需编码

  • 但你必须知道坐标范围
  • 例如,如果你有32位int,你的坐标适合16位,那么:

    int xy,x,y;
    xy = (x&0x0000FFFF) | ((y&0x0000FFFF)<<16); // this makes xy = (x,y)
    

如果您需要再次解压缩数据,请执行以下操作:

    x= xy     &0x0000FFFF; if (int(x&00008000)!=0)  x|=0xFFFF0000;
    y=(xy>>16)&0x0000FFFF; if (int(y&00008000)!=0)  y|=0xFFFF0000;
  • 最后的if恢复负数的缺失位......

2. 如果是单变量,则使用

  • 数组:

    int xy[2],x,y;
    xy[0]=x;
    xy[1]=y;
    
  • 或struct / class

    int x,y;
    struct point { int x,y; } xy;      
    xy.x=x;
    xy.y=y;