加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 矩形重叠,但说它在里面?

发布时间:2020-12-15 02:11:22 所属栏目:Java 来源:网络整理
导读:我制作了一个程序,用户创建两个带有CenterX和CenterY坐标,宽度和高度的自定义矩形.在用户指定这些尺寸之后,程序将显示一个矩形是否包含另一个矩形,与另一个矩形重叠,或者根本不相符.这是我的代码: import javafx.application.Application;import javafx.sce
我制作了一个程序,用户创建两个带有CenterX和CenterY坐标,宽度和高度的自定义矩形.在用户指定这些尺寸之后,程序将显示一个矩形是否包含另一个矩形,与另一个矩形重叠,或者根本不相符.这是我的代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.shape.*;
import javafx.scene.text.*;
import javafx.scene.paint.Color;
import javafx.scene.layout.Pane;
import java.util.*;

public class TwoRectangles extends Application
{
   public void start(Stage stage)
   {
       Pane pane = new Pane();

       Scanner input = new Scanner(System.in);
       System.out.print("Enter the X and Y center coordinates for rectangle1: ");
       double xCord1 = input.nextDouble();
       double yCord1 = input.nextDouble();

       System.out.print("Enter the Width and Height for rectangle1: ");
       double width1 = input.nextDouble();
       double height1 = input.nextDouble();

       System.out.print("Enter the X and Y center coordinates for rectangle2: ");
       double xCord2 = input.nextDouble();
       double yCord2 = input.nextDouble();

       System.out.print("Enter the Width and Height for rectangle2: ");
       double width2 = input.nextDouble();
       double height2 = input.nextDouble();

       Rectangle rectangle1 = new Rectangle(xCord1,yCord1,width1,height1);
       Rectangle rectangle2 = new Rectangle(xCord2,yCord2,width2,height2);

       rectangle1.setFill(null);
       rectangle2.setFill(null);
       rectangle1.setStroke(Color.BLACK);
       rectangle2.setStroke(Color.BLACK);

    // Compute the 4 corners's coordinates for the rectangle
        double r1x1 = xCord1 - (width1 / 2.0);
        double r1x2 = xCord1 + (width1 / 2.0);
        double r1y1 = yCord1 + (height1 / 2.0);
        double r1y2 = yCord1 - (height1 / 2.0);

        double r2x1 = xCord2 - (width2 / 2.0);
        double r2x2 = xCord2 + (width2 / 2.0);
        double r2y1 = yCord2 + (height2 / 2.0);
        double r2y2 = yCord2 - (height2 / 2.0);


   if ((r1x1 >= r2x1) && (r1x2 <= r2x2) && (r1y1 >= r2y1) && (r1y2 <= r2y2))
      { 
         Text containText = new Text(500,500,"One rectangle is contained in another");
         pane.getChildren().add(containText);
      }

    else if ((r1x1 < r2x2) && (r1x2 > r2x1) &&  (r1y1 < r2y2) && (r1y2 > r2y1))
       {
            Text overlapText = new Text(500,"The rectangles overlap");
            pane.getChildren().add(overlapText);

       }

       else
       {
            Text noneText = new Text(500,"The rectangles do not overlap");
            pane.getChildren().add(noneText);
       }      
       pane.getChildren().addAll(rectangle1,rectangle2);
       Scene scene = new Scene(pane);
       stage.setTitle("Overlapping Rectangles");
       stage.setScene(scene);
       stage.show();
   }
}

每当我输入(50,50)两个矩形的centerX和centerY坐标,宽度:20,矩形1的高度50和宽度50,矩形2的高度20它告诉我矩形在彼此内部而不是相互重叠.我究竟做错了什么?

解决方法

你的问题是Y坐标.第二个小于第一个.这意味着测试将变得不那么可读,例如

(r1x1 >= r2x1) && (r1x2 <= r2x2) && (r1y1 >= r2y1) && (r1y2 <= r2y2)

成为(同时检查r2是否在r1中):

(r1x1 >= r2x1 && r1x2 <= r2x2 && r1y1 <= r2y1 && r1y2 >= r2y2) ||
//                                    ^^              ^^
(r2x1 >= r1x1 && r2x2 <= r1x2 && r2y1 <= r1y1 && r2y1 >= r1y2)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读