gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:32:51 26 4
gpt4 key购买 nike

编写一个 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);

至于半径,我不确定。也不确定代码是否有效,或者我把事情搞得太复杂了,或者根本就相差甚远。

最佳答案

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

通过最简单的定义,我们可以使用 ((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)
);

关于java - 两个点,然后找到包含这些点的最小圆和最小矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com