Computer >> Máy Tính >  >> Lập trình >> Lập trình

Kiểm tra xem bốn điểm đã cho có tạo thành một Hình vuông hay không


Trong mặt phẳng 2d, bốn điểm cho trước. Thuật toán này sẽ kiểm tra xem bốn điểm có tạo thành một hình vuông hay không.

Kiểm tra một hình vuông, chúng tôi phải phù hợp với các điều kiện này -

  • Tất cả bốn cạnh được tạo bởi các điểm đã cho đều giống nhau.
  • Tất cả hai cạnh kết nối đều có góc vuông.

Đầu vào và Đầu ra

Input:
Four points {(20, 10), (10, 20), (20, 20), (10, 10)}
Output:
Points are forming a square.

Thuật toán

isFormingSquare(p1, p2, p3, p4)

Trong quy trình này, chúng ta sẽ sử dụng phương thức squareDist (p1, p2), nó sẽ trả về khoảng cách bình phương của hai điểm đã cho.

Đầu vào: Bốn điểm.

Đầu ra: Đúng khi các điểm cho trước tạo thành một hình vuông.

Begin
   dist12 := squareDist(p1, p2)
   dist13 := squareDist(p1, p3)
   dist14 := squareDist(p1, p4)

   if dist12 = dist13 and 2*dist12 = dist14, then
      dist := squareDist(p2, p4)
      return true when dist = squareDist(p3, p4) and dist = dist12
   if dist13 = dist14 and 2*dist13 = dist12, then
      dist := squareDist(p2, p3)
      return true when dist = squareDist(p2, p4) and dist = dist13
   if dist12 = dist14 and 2*dist12 = dist13, then
      dist := squareDist(p2, p3)
      return true when dist = squareDist(p3, p4) and dist = dist12
   return false
End

Ví dụ

#include<iostream>
using namespace std;

struct Point {
   int x, y;
};

int squareDist(Point p, Point q) {
   return (p.x - q.x)*(p.x - q.x) + (p.y - q.y)*(p.y - q.y);
}

bool isSquare(Point p1, Point p2, Point p3, Point p4) {    //check four points are forming square or not
   int dist12 = squareDist(p1, p2);     // distance from p1 to p2
   int dist13 = squareDist(p1, p3);     // distance from p1 to p3
   int dist14 = squareDist(p1, p4);     // distance from p1 to p4

   //when length of p1-p2 and p1-p3 are same, and square of (p1-p4) = 2*(p1-p2)
   if (dist12 == dist13 && 2*dist12 == dist14) {
      int dist = squareDist(p2, p4);
      return (dist == squareDist(p3, p4) && dist == dist12);
   }

   //same condition for all other combinations
   if (dist13 == dist14 && 2*dist13 == dist12) {
      int dist = squareDist(p2, p3);
      return (dist == squareDist(p2, p4) && dist == dist13);
   }

   if (dist12 == dist14 && 2*dist12 == dist13) {
      int dist = squareDist(p2, p3);
      return (dist == squareDist(p3, p4) && dist == dist12);
  }
  return false;
}

int main() {
   Point p1 = {20, 10}, p2 = {10, 20}, p3 = {20, 20}, p4 = {10, 10};
   if(isSquare(p1, p2, p3, p4))
      cout << "Points are forming a square.";
   else
      cout << "Points are not forming a square";
}

Đầu ra

Points are forming a square.