The rectangle overlaps, but does it speak inside?

I created a program in which the user creates two custom rectangles with the coordinates, width and height of CenterX and CenterY. After the user determines these sizes, the program will show whether one rectangle contains another, overlaps another, or does not occur at all. Here is my code:

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 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, 500, "The rectangles overlap");
            pane.getChildren().add(overlapText);

       }

       else
       {
            Text noneText = new Text(500, 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();
   }
}

Whenever I enter, (50, 50) for the coordinates of the center X and center Y for both rectangles, width: 20, height 50 for rectangle1 and width 50, height 20 for rectangle2, it tells me that the rectangles are inside each other rather than overlapping each other. What am I doing wrong?

+4
source share
1 answer

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)
0

Source: https://habr.com/ru/post/1615854/


All Articles