| 228 | |
| 229 | //-------------------------------------------------------calc_polygon_area |
| 230 | template<class Storage> double calc_polygon_area(const Storage& st) |
| 231 | { |
| 232 | unsigned i; |
| 233 | double sum = 0.0; |
| 234 | double x = st[0].x; |
| 235 | double y = st[0].y; |
| 236 | double xs = x; |
| 237 | double ys = y; |
| 238 | |
| 239 | for(i = 1; i < st.size(); i++) |
| 240 | { |
| 241 | const typename Storage::value_type& v = st[i]; |
| 242 | sum += x * v.y - y * v.x; |
| 243 | x = v.x; |
| 244 | y = v.y; |
| 245 | } |
| 246 | return (sum + x * ys - y * xs) * 0.5; |
| 247 | } |
| 248 | |
| 249 | //------------------------------------------------------------------------ |
| 250 | // Tables for fast sqrt |