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

标签 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);

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

最佳答案

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

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

相关文章:

java - 我如何制作一棵圣诞树,其线条为 1、3、5、3、5、7、5、7、9、7、9

java - 在 Spring 中的 Preauthorize 表达式中使用 Autowired bean

java - 如果发生崩溃,谁来处理队列中的数据

Java PL/SQL 'Execute Immediate'

java - 初始化 ArrayList 的数组

Java 泛型 : Does "T2 extends T1" imply "T1 super T2"?

java - 带有 InputMismatchException 的 try/catch 创建无限循环

java - 在 Java 中监视磁盘 Activity

java - Spring boot 在 servlet 上下文之外获取应用程序基础 url

java - 将 TestNg 报告上传到 S3