Chào mọi người! Em đang có một bài tập về code c++ nhưng đang mắc kẹt ở thuật toán, vẩn chưa nghĩ ra thuật toán để giải.
Đề là cho tọa độ hai điểm A(Xa,Ya), B(Xb,Yb) là hai đỉnh đối nhau của hình vuông. Nhập vào một điểm bất kì! Xác định điểm đó có nằm trong hình vuông hay không kể cả viền. Tọa độ 2 điểm A, B là cho sẵn ạ!
Mong mọi người giúp đỡ! Em xin cám ơn nhiều!!!
Xác định một điểm có nằm trong hình vuông hay không
Dùng nhiều dấu !
quá, đa số là không hợp văn cảnh.
Bạn dùng công thức diện tích.
S nằm trong ABCD <-> S(SAB) + S(SBC) + S(SCD) + S(DCA) = S(ABCD)
với S(SAB) là diện tích của hình tạo bởi các điểm S, A, B.
3 Likes
Điểm M nằm trong đoạn thẳng AB khi và chỉ khi:
- vector AM = alpha * vector AB, 0 <= alpha <= 1
- hay, 0 <= ( vector AM / vector AB ) <= 1
Trở lại đề bài hình vuông:
- Chiếu điểm A, B, M xuống trục Ox, được Ax = (xA, 0), Bx = (xB, 0), Mx = (xM, 0).
- Kiểm tra điểm Mx có nằm trong đoạn thẳng AxBx, hay 0 <= (xM - xA) / (xB - xA) <= 1 (1)
- Tương tự chiếu trên trục Oy, được công thức 0 <= (yM - yA) / (yB - yA) <= 1 (2)
- Nếu thoả cả (1) và (2) thì M nằm trong hình vuông
Về code thì chỉ cần 1 lệnh if lấy tất cả điều kiện rồi AND (&&).
2 Likes
Minh cám ơn bạn nhiều!!!
Mình cám ơn bạn nhiều!