Tính diện tích tam giác - Phần 2

Cấu trúc dữ liệu và giải thuật

0.0 (0 đánh giá)
Tạo bởi Katsu Cập nhật lần cuối 14:01 08-07-2022 856 lượt xem 0 bình luận
Tác giả/Dịch giả: K9
Học nhanh

Danh sách bài học

Tính diện tích tam giác - Phần 2

Dẫn nhập

Trong bài học trước, chúng ta đã cùng nhau tìm ra công thức tính diện tích của một tam giác. Trong bài học ngày hôm nay, chúng ta hãy cùng nhau tìm hiểu xem từ công thức đó có thể suy ra những gì nhé.


Nội dung

Để có thể tiếp thu bài học này một cách tốt nhất, các bạn nên có những kiến thức cơ bản về:

Trong bài học ngày hôm nay, chúng ta sẽ cùng nhau tìm hiểu về:

  • Một số tính chất của công thức tính diện tích tam giác

Vấn đề kì trước

Nhắc lại một chút, trong bài học trước, ta đã đặt ra vấn đề như sau:

Trên hệ tọa độ Descartes, cho một tam giác gồm 3 đỉnh xác định bởi các toạ độ (X_{0}, Y_{0}). Tính diện tích tam giác đã cho.

Input:

  • Gồm 3 dòng, mỗi dòng cho bởi 2 số nguyên dương (X_{i}, Y_{i}) thể hiện cho toạ độ đỉnh của tam giác (0\leq X_{i}, Y_{i}\leq 10^{5})

Output:

  • Một số thực duy nhất là diện tích tam giác đã cho. Kết quả làm tròn đến 1 chữ số phần thập phân.

Ví dụ:

Input Output

2 1

6 2

3 4

5 5

Giải thích ví dụ:

Đây là tam giác đã cho trên hệ toạ độ Descartes

Tính diện tích tam giác

Sau quá trình phân tích và biến đổi, ra rút ra được công thức sau:

Gọi (X_{1},Y_{1}), (X_{2},Y_{2}), (X_{3},Y_{3}) lần lượt là toạ độ 3 đỉnh của một tam giác. Khi đó, diện tích tam giác đó được xác định như sau:

S = (Y_{2} + Y_{1}) \times (X_{2} - X_{1}) + (Y_{3} + Y_{2}) \times (X_{3} - X_{2}) +(Y_{1} + Y_{3}) \times (X_{1} - X_{3}) 

Mình đã đặt ra một vấn đề như sau:

Nếu như 3 đỉnh của tam giác được tính trong công thức trên có thứ tự là A, C, B, ta sẽ có kết quả là 5,5. Vậy điều gì sẽ xảy ra nếu thứ tự các đỉnh trong công thức trên là A, B, C?

Các bạn có thể thử thay thứ tự các đỉnh trong đoạn code ở bài trước chúng ta đã làm và thấy ngay kết quả. Lúc này, output là -5,5, một số âm. Đây rõ ràng là một điều vô lí do diện tích tam giác thì làm sao có thể là một số âm được. Vậy phải chăng công thức của chúng ta sai? Nếu các bạn tinh ý có thể nhận ra, output khi này chính là giá trị âm của kết quả đúng. Điều này có gì đặc biệt? Trước hết, hãy cùng tìm hiểu tại sao lại có kết quả trên.


Diện tích đại số

Giải thích

Tính diện tích tam giác

Hãy cùng thay toạ độ của các đỉnh theo thứ tự A, B, C vào công thức trên:

S = (Y_{B} + Y_{A}) \times (X_{B} - X_{A}) + (Y_{C} + Y_{B}) \times (X_{C} - X_{B}) +(Y_{A} + Y_{C}) \times (X_{A} - X_{C})

Tương đương, S = (Y_{B} + Y_{A}) \times (X_{B} - X_{A}) - (Y_{C} + Y_{B}) \times (X_{B} - X_{C}) - (Y_{A} + Y_{C}) \times (X_{C} - X_{A}) 

Hay, S = S_{ABPM} - S_{CNPB} - S_{AMNC}

Nếu so công thức trên với công thức đã tính ở bài trước, ta thấy ngay công thức này là công thức ngược với công thức bài trước. Tại sao lại có điều này? Ta có thể giải thích bằng hình học như sau:

Ở bài trước, ta tính “ghép” hai hình AMNC CNPB thì thấy thừa ra hình ABPM nên “cắt” bỏ đi hình ABPM để thu được tam giác ABC còn quá trình trên chính là đi làm ngược lại, ta “cắt” bỏ hai hình AMNC CNPB khỏi hình ABPM nên kết quả là ta “cắt” dư tam giác ABC.

Do đó, thực chất công thức trên chỉ cho ta biết được diện tích đại số của một hình. Muốn tính diện tích hình học của một hình, ta cần lấy giá trị tuyệt đối của diện tích đại số.


Ứng dụng

Xác định chiều các đỉnh được xét

Vậy thì diện tích đại số của một hình có cho ta biết tính chất gì không?

Các bạn hãy thử thứ tự các đỉnh được xét là (A, B, C), (B, C, A) rồi lại thử thứ tự các đỉnh là (C, B, A), (B, A, C). Các bạn có thấy điều gì đặc biệt không?

Nếu các đỉnh được xét theo thứ tự thuận chiều kim đồng hồ thì diện tích đại số sẽ là một số dương và ngược lại nếu các đỉnh được xét theo thứ tự ngược chiều kim đồng hồ thì diện tích đại số sẽ là một số âm.

Mệnh đề trên có thể chứng minh rất đơn giản bằng hình học nhưng ở đây coi như ta công nhận mệnh đề trên.

Mệnh đề trên được sử dụng khá phổ biến, đặc biệt là trong thuật toán tìm bao lồi. Ở trong khóa học này mình sẽ không giới thiệu về bao lồi do đây là một nội dung khó. Tuy nhiên, nếu bạn nào có hứng thú thì có thể tìm hiểu thêm về bao lồi và các ứng dụng của nó với các bài toán hình học.


Xác định một điểm có thuộc tam giác hay không

Bây giờ, ta có một bài toán như sau:

Cho toạ độ một điểm và toạ độ ba đỉnh một tam giác trên hệ tọa độ Descartes. Xác định xem điểm đó có thuộc vào tam giác đã cho hay không.

Từ những hiểu biết về diện tích tam giác, các bạn có nghĩ ra là chúng ta phải làm thế nào không?

Các bạn có nhận xét gì về diện tích của ba tam giác ABD, BCD và CAD so với tam giác ABC?

Ta thấy ngay được S_{ABD} + S_{BCD} + S_{CAD} = S_{ABC}. Do đó, để kiểm tra một điểm có thuộc tam giác hay không ta chỉ cần kiểm tra xem liệu 3 tam giác được tạo ra bằng việc kết hợp 2 đỉnh của tam giác và đỉnh cần tìm có bằng diện tích tam giác đang kiểm tra hay không. Nên ghi nhớ diện tích ở đây sẽ là diện tích hình học.


Kết luận

Qua bài này chúng ta đã nắm về Tính diện tích tam giác.

Bài sau chúng ta sẽ tìm hiểu về Quy hoạch động.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

K9

Nhà sáng lập Howkteam.com, KQuiz.vn & tác giả các khóa học C#, Auto, Unity3D, Python....

Với mong muốn mang đến kiến thức chất lượng, miễn phí cho mọi người, với tâm huyết phá bỏ rào cản kiến thức từ việc giáo dục thu phí. Tôi đã cùng đội ngũ Kteam đã lập nên trang website này để thế giới phẳng hơn.
Hãy cùng chúng tôi lan tỏa kiến thức đến cộng đồng! 

Khóa học

Cấu trúc dữ liệu và giải thuật

Bạn đã từng đau đầu với các cấu trúc stack, queue,.. hoặc cảm thấy cực kỳ khó khăn với các thuật toán sắp xếp, tìm kiếm được sử dụng trong lập trình. Đừng lo lắng! Trong khoá học này, chúng ta sẽ cùng nhau tìm hiểu một cách đơn giản nhất về cấu trúc dữ liệu và giải thuật, cũng như giúp bạn nắm rõ hơn về các kiến thức này.

Hãy cùng xem cấu trúc dữ liệu và giải thuật có gì đáng sợ không nhé!

Đánh giá

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Không có video.