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.

Nguyễn Duy Hùng viết 14:04 ngày 01/10/2018

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

Nguyễn Đình Biển viết 14:02 ngày 01/10/2018

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

Sơn viết 14:03 ngày 01/10/2018

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

Son Tran viết 13:54 ngày 01/10/2018

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

rogp10 viết 14:08 ngày 01/10/2018

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à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 +.

Bài liên quan
0