编写一个读取两个点的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);
就半径而言,我不确定。同时也不确定代码是否有效,或者我是在使事情复杂化,还是远远不够。
答案 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)
);