01/10/2018, 11:53
Cho em hỏi công thức tính diện tích đa giác lồi khi đã biết tọa độ 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ài liên quan
Bạn sử dụng công thức tính diện tích tam giác
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
Với đỉnh a[n+1] = a[1]
đú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.
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)).
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ànhx[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êmx[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 +.