如何在Java中确认给定的四个点是否构成正方形?
正方形是一个二维图形,它有四条边长相等。正方形的对边彼此平行,所有四个内角都是直角,对角线长度相等。在本文中,我们将检查如何确认给定的四个点是否构成正方形。
我们将得到一个有四个点的正方形,即 A、B、C、D,如图所示:
我们需要根据这些点来检查它们是否构成正方形。要检查这一点,它应该满足以下条件:
点 A 和 C 之间的距离,以及点 B 和 D 之间的距离,即“x”,应该相等。
点 A 和 B 之间的距离,以及点 B 和 C 之间的距离,以及点 C 和 D 之间的距离,以及点 D 和 A 之间的距离,即“z”,应该相等。
我们将使用以下公式找到两点之间的距离:
$$\mathrm{d=\sqrt{(x_{2}-x_{1})^2(y_{2}-y_{1})^2}}$$
其中点 1 为 (x1, y1),点 2 为 (x2, y2)。
让我们开始吧!
举几个例子
实例 1
给定四个输入点为:
P1(3,7), P2(4,3), P3(7,8), P4(1,9)
将其代入距离公式并检查正方形条件后,结果将为:
给定的四个点不构成正方形。
实例 2
给定四个输入点为:
P1(20,20), P2(20,10), P3(10,10), P4(10,20)
将其代入距离公式并检查正方形条件后,结果将为:
给定的四个点构成正方形。
算法
步骤 1 - 声明并初始化变量。
步骤 2 - 找到圆心 1 和圆心 2 之间的距离。
步骤 3 - 检查五个距离条件。
步骤 4 - 打印结果。
多种方法
我们提供了不同方法的解决方案。
使用静态输入
使用用户定义的方法
让我们逐一查看程序及其输出。
方法 1:使用静态输入
在这种方法中,将分配点值。然后根据算法,我们将找到给定的四个点是否构成正方形。
示例
public class Main{ //main method public static void main(String[] args){ //declaring variables int x1=3, x2=4, x3=7, x4=1; int y1=7, y2=3, y3=8, y4=9; double d1, d2, d3, d4, d5, d6; //applyinng logic d1 = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); d2 = (x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2); d3 = (x4 - x3) * (x4 - x3) + (y4 - y3) * (y4 - y3); d4 = (x1 - x4) * (x1 - x4) + (y1 - y4) * (y1 - y4); d5 = (x4 - x2) * (x4 - x2) + (y4 - y2) * (y4 - y2); d6 = (x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1); if (d1 == 0 || d2 == 0 || d3 == 0 || d4 == 0 || d5 == 0 || d6 == 0){ System.out.println("Given four points do not form a square"); } else if (d1 == d2 && d2 == d3 && d3 == d4 && d5 == d6){ //prints if four points form square System.out.println("Given four points form a square"); } else { //prints if four points do not form square System.out.println("Given four points do not form a square"); } } }
输出
Given four points do not form a square
方法 2:使用用户定义的方法
在这种方法中,将分配点值。然后通过传递给定值来调用用户定义的方法,并根据算法,我们将找到给定的四个点是否构成正方形。
示例
public class Main{ //main method public static void main(String[] args){ //creating objects of Point Point p1 = new Point(20, 20); Point p2 = new Point( 20, 10 ); Point p3 = new Point(10, 10 ); Point p4 = new Point( 10, 20 ); //calling user defined method if(isSquare(p1, p2, p3, p4)==true){ //print if four points form a square System.out.println("Given four points form a square"); } else{ //print if points does not form a square System.out.println("Given four points do not form a square"); } } // Declaring Point class static class Point{ int x, y; public Point(int x, int y){ this.x = x; this.y = y; } }; //function to find square of distance from point 'p' to point 'q' static int distSq(Point p, Point q){ return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y); } //user defined method static boolean isSquare(Point p1, Point p2, Point p3, Point p4){ int d1 = distSq(p1, p2); int d2 = distSq(p2, p3); int d3 = distSq(p3, p4); int d4 = distSq(p4, p1); int d5 = distSq(p1, p3); int d6 = distSq(p2, p4); if (d1 == 0 || d2 == 0 || d3 == 0 || d4 == 0 || d5 == 0 || d6 == 0) return false; if (d1 == d2 && d2 == d3 && d3 == d4 && d5 == d6){ //it returns true if (p1, p2, p3, p4) form a square return true; } //it returns false if (p1, p2, p3, p4) do not form a square return false; } }
输出
Given four points form a square
在本文中,我们探索了使用 Java 编程语言检查直线是否与圆相切、相交或位于圆外的不同方法。