Hỏi công thức tính diện tích đa giác lồi khi đã biết toạ độ các đỉnh

Ai biết công thức tính diện tích đa giác lồi khi đã biết tọa độ các đỉnh chỉ em với. Em cảm ơn.

Bạn sử dụng công thức tính diện tích tam giác
[DEAD LINK]
Rồi chạy một vòng for để tính các tam giác chia nhỏ ra từ đa giác lồi thôi

4 Likes

[DEAD LINK]
Với đỉnh a[n+1] = a[1]

4 Likes

đúng là nó rồi. Em cảm ơn ạ.

Google search từ khoá sau: “polygon area formula from coordinates” và công thức có ngay trong kết quả đầu tiên.

3 Likes

Copy lên: S = 1/2*abs(Sigma(i=0..n) (x[i] + x[i+1]) * (y[i-1] - y[i]) )


Dễ nhớ nhất là “Shoelace formula”: các đỉnh đánh số từ 0 đến n-1 thì diện tích là:

S = 1/2*abs(Sigma(i = 0..n-1) (x[i] * y[i+1] - y[i] * x[i+1]) + x[n-1] * y[0] + x[0] * y[n-1]).

(dây giày)
x[i] y[i]
x[i+1] y[i+1]

Tuy nhiên nếu tọa độ đủ lớn thì kết quả sẽ không chính xác. Thêm vào số hạng x_[i+1]*y_[i+1] - x[i]*y[i] để đặt nhân tử chung, trong ngoặc trở thành x[i] * (y[i+1] - y[i]) + x[i+1] * (y[i+1] - y[i]) = (x[i] + x[i+1]) * (y[i+1] - y[i]). Do đây là tổng rút gọn được (telescoping), sau khi rời sigma thì còn lại -x[0] * y[0] + x[n-1] * y[n-1], cộng thêm x[0] * y[0] - x[n-1] * y[n-1] là vừa hết. Vậy ct tốt hơn là:

S = 1/2*abs(Sigma(i=0..n) (x[i] + x[i+1]) * (y[i-1] - y[i]) ) với đỉnh n trùng với đỉnh 0. Tức là một dấu - và một dấu +.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?