给定平面中四个点的坐标,找出这四个点是否形成一个正方形。
要检查正方形,我们需要检查以下内容。
a) 由点组成的所有四个边都相同。
b) 任意两条边的夹角为 90 度。 (这个条件是必需的,因为四边形也有相同的边。
c) 检查两条对角线的距离是否相同
这个想法是选择任何点并计算它与其余点的距离。让选取的点为“p”。为了形成一个正方形,两个点到’p’的距离必须相同,让这个距离为d。到一点的距离必须与 d 不同,并且必须等于 √2 乘以 d。设这个距离不同的点为’q’。
上述条件还不够好,因为不同距离的点可以在另一侧。我们还需要检查 q 与其他 2 个点的距离是否相同,并且该距离与 d 相同。
下面是上述想法的实现。
C++
// A C++ program to check if four given points form a square or not.
#include
using namespace std;
// Structure of a point in 2D space
struct Point {
int x, y;
};
// A utility function to find square of distance
// from point 'p' to point 'q'
int distSq(Point p, Point q)
{
return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y);
}
// This function returns true if (p1, p2, p3, p4) form a
// square, otherwise false
bool isSquare(Point p1, Point p2, Point p3, Point p4)
{
int d2 = distSq(p1, p2); // from p1 to p2
int d3 = distSq(p1, p3); // from p1 to p3
int d4 = distSq(p1, p4); // from p1 to p4
if (d2 == 0 || d3 == 0 || d4 == 0)
return false;
// If lengths if (p1, p2) and (p1, p3) are same, then
// following conditions must met to form a square.
// 1) Square of length of (p1, p4) is same as twice
// the square of (p1, p2)
// 2) Square of length of (p2, p3) is same
// as twice the square of (p2, p4)
if (d2 == d3 && 2 * d2 == d4
&& 2 * distSq(p2, p4) == distSq(p2, p3)) {
return true;
}
// The below two cases are similar to above case
if (d3 == d4 && 2 * d3 == d2
&& 2 * distSq(p3, p2) == distSq(p3, p4)) {
return true;
}
if (d2 == d4 && 2 * d2 == d3
&& 2 * distSq(p2, p3) == distSq(p2, p4)) {
return true;
}
return false;
}
// Driver program to test above function
int main()
{
Point p1 = { 20, 10 }, p2 = { 10, 20 },
p3 = { 20, 20 }, p4 = { 10, 10 };
isSquare(p1, p2, p3, p4) ? cout << "Yes" : cout << "No";
return 0;
}
Java
// A Java program to check if four given points form a square or not.
class GFG
{
// Structure of a point in 2D space
static class Point
{
int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
};
// A utility 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);
}
// This function returns true if (p1, p2, p3, p4) form a
// square, otherwise false
static boolean isSquare(Point p1, Point p2, Point p3, Point p4)
{
int d2 = distSq(p1, p2); // from p1 to p2
int d3 = distSq(p1, p3); // from p1 to p3
int d4 = distSq(p1, p4); // from p1 to p4
if (d2 == 0 || d3 == 0 || d4 == 0)
return false;
// If lengths if (p1, p2) and (p1, p3) are same, then
// following conditions must met to form a square.
// 1) Square of length of (p1, p4) is same as twice
// the square of (p1, p2)
// 2) Square of length of (p2, p3) is same
// as twice the square of (p2, p4)
if (d2 == d3 && 2 * d2 == d4
&& 2 * distSq(p2, p4) == distSq(p2, p3))
{
return true;
}
// The below two cases are similar to above case
if (d3 == d4 && 2 * d3 == d2
&& 2 * distSq(p3, p2) == distSq(p3, p4))
{
return true;
}
if (d2 == d4 && 2 * d2 == d3
&& 2 * distSq(p2, p3) == distSq(p2, p4))
{
return true;
}
return false;
}
// Driver code
public static void main(String[] args)
{
Point p1 = new Point(20, 10), p2 = new Point( 10, 20 ),
p3 = new Point(20, 20 ), p4 = new Point( 10, 10 );
System.out.println(isSquare(p1, p2, p3, p4)==true ? "Yes" : "No");
}
}
// This code is contributed by PrinciRaj1992
Python3
# A Python3 program to check if
# four given points form a square or not.
class Point:
# Structure of a point in 2D space
def __init__(self, x, y):
self.x = x
self.y = y
# A utility function to find square of
# distance from point 'p' to point 'q'
def distSq(p, q):
return (p.x - q.x) * (p.x - q.x) +\
(p.y - q.y) * (p.y - q.y)
# This function returns true if (p1, p2, p3, p4)
# form a square, otherwise false
def isSquare(p1, p2, p3, p4):
d2 = distSq(p1, p2) # from p1 to p2
d3 = distSq(p1, p3) # from p1 to p3
d4 = distSq(p1, p4) # from p1 to p4
if d2 == 0 or d3 == 0 or d4 == 0:
return False
# If lengths if (p1, p2) and (p1, p3) are same, then
# following conditions must be met to form a square.
# 1) Square of length of (p1, p4) is same as twice
# the square of (p1, p2)
# 2) Square of length of (p2, p3) is same
# as twice the square of (p2, p4)
if d2 == d3 and 2 * d2 == d4 and \
2 * distSq(p2, p4) == distSq(p2, p3):
return True
# The below two cases are similar to above case
if d3 == d4 and 2 * d3 == d2 and \
2 * distSq(p3, p2) == distSq(p3, p4):
return True
if d2 == d4 and 2 * d2 == d3 and \
2 * distSq(p2, p3) == distSq(p2, p4):
return True
return False
# Driver Code
if __name__=="__main__":
p1 = Point(20, 10)
p2 = Point(10, 20)
p3 = Point(20, 20)
p4 = Point(10, 10)
if isSquare(p1, p2, p3, p4):
print('Yes')
else:
print('No')
# This code is contributed by Mayank Chaudhary
# aka chaudhary_19
C#
// A C# program to check if four given points form a square or not.
using System;
class GFG
{
// Structure of a point in 2D space
class Point
{
public int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
};
// A utility 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);
}
// This function returns true if (p1, p2, p3, p4) form a
// square, otherwise false
static bool isSquare(Point p1, Point p2, Point p3, Point p4)
{
int d2 = distSq(p1, p2); // from p1 to p2
int d3 = distSq(p1, p3); // from p1 to p3
int d4 = distSq(p1, p4); // from p1 to p4
if (d2 == 0 || d3 == 0 || d4 == 0)
return false;
// If lengths if (p1, p2) and (p1, p3) are same, then
// following conditions must met to form a square.
// 1) Square of length of (p1, p4) is same as twice
// the square of (p1, p2)
// 2) Square of length of (p2, p3) is same
// as twice the square of (p2, p4)
if (d2 == d3 && 2 * d2 == d4
&& 2 * distSq(p2, p4) == distSq(p2, p3))
{
return true;
}
// The below two cases are similar to above case
if (d3 == d4 && 2 * d3 == d2
&& 2 * distSq(p3, p2) == distSq(p3, p4))
{
return true;
}
if (d2 == d4 && 2 * d2 == d3
&& 2 * distSq(p2, p3) == distSq(p2, p4))
{
return true;
}
return false;
}
// Driver code
public static void Main(String[] args)
{
Point p1 = new Point(20, 10), p2 = new Point(10, 20),
p3 = new Point(20, 20), p4 = new Point(10, 10);
Console.WriteLine(isSquare(p1, p2, p3, p4) == true ? "Yes" : "No");
}
}
// This code is contributed by 29AjayKumar
Javascript
输出:
Yes
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。