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.