两个点,然后找到最小的圆和包含点的最小矩形

时间:2014-01-30 19:19:16

标签: java

编写一个读取两个点的Java程序,然后找到最小的圆和包含这些点的最小矩形。请注意,圆的中心和半径表示圆形,两个对角点的矩形表示 - 左上角和右下角。例如,输入p1 =(0,0)和p2 =(4,3)作为输入,程序将打印C =((2,1.5),2.5)和R =((0,3),(4) ,0))。不允许使用if语句,但您可以使用内置方法,例如sqrt,pow,abs,max和min。

Scanner in = new Scanner ( System.in);
    double cx, cy, cyx,c; 
    double p1x,p1y,p2x,p2y;
    System.out.print("Enter point 1, x ");//0
    p1x=in.nextDouble();
    System.out.print("Enter point 1, y ");//0
    p1y=in.nextDouble();
    System.out.print("Enter point 2, x ");//4
    p2x=in.nextDouble();
    System.out.print("Enter point 2, y ");//3
    p2y=in.nextDouble();

    cx= (p2x-p1x)/2;// (2,)
    cy=(p2y-p1y)/2;// (,1.5) 
    cyx= (p2x-p2y)+cy;// ((,),2.5)

    System.out.println((cx+","+cy)+","+cyx);

就半径而言,我不确定。同时也不确定代码是否有效,或者我是在使事情复杂化,还是远远不够。

1 个答案:

答案 0 :(得分:1)

包含两个点的最小圆将沿着圆的圆周具有每个点,圆的中心直接位于这两​​个点之间,这意味着圆的半径是点之间距离的一半。

使用最简单的定义,我们可以使用((x2 + x1) / 2, (y2 + y1) / 2)作为中心点,使用sqrt((x2 - x1)^2 + (y2 - y1)^2) / 2作为半径。但是,如果我们使用java.awt.geom.Ellipse2D来表示圆,则需要让方形的左上角包含圆和圆的直径。

直径很容易:半径的两倍,或sqrt((x2 - x1)^2 + (y2 - y1)^2)

要获取包含正方形的左上角,请从中心点的x坐标和y坐标中减去半径:

double diameter = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
Point2D.Double center = new Point2D.Double((x2 + x1) / 2, (y2 + y1) / 2);
Point2D.Double tlCorner = new Point2D.Double(
    center.x - diameter / 2,
    center.y - diameter / 2
);
Ellipse2D.Double circle = new Ellipse2D.Double(
    tlCorner.x,
    tlCorner.y,
    diameter,
    diameter
);

包含两个点的最小矩形使用这两个点作为对角。同样,使用最简单的定义,我们可以将两个输入点用作矩形的两个角。但是,Java的矩形类需要左上角,宽度和高度,而不是两个点。

Rectangle2D.Double rect = new Rectangle2D.Double(
    Math.min(x1, x2),
    Math.min(y1, y2),
    Math.abs(x2 - x1),
    Math.abs(y2 - y1)
);