krugliy писал(а):очень нужен математический апарат
аппарат нужен скорее арифметический ... используем (практически) метод прямоугольников, т.е. прямоугольную палетку.
1) Накладываем на фигуру достаточно густую регулярную ортогональную сетку с шагом dxy, для этого используем охватывающий прямоугольник фигуры
2) определяем, какие точки нашей сетки попали внутрь фигуры (ищем в сети исходник функции point_in_poly() или типа того)
3) вычисляем отметки поверхности в этих точках: ячейку сеточной модели определяем вычислением (отнимаем координаты угла, и делим на шаг сетки), внутри интерполируем билинейно по углам - смотрим в википедии элементарные формулы, если не знаем
4) определяем площадь, приходящуюся на одну точку, аппроксимируя поверхность плоскостью - для этого вычисляем градент поверхности в точке (из той же линейной интерполяции в ячейке), и из него - косинус угла нормали с вертикалью (на него делим площадь проекции, которая dxy^2)
5) суммируем отметки, вычисленные в (3) и умноженные на площади, вычисленные в (4)
6) повторяем 1-5, каждый раз сгущая сетку в 2 раза (можно сохранять прошлые точки и значения). Смотрим разность между площадями, если она меняется не более, чем на 0.001% (или типа того), то считаем, что задачка решена
7) если ничего не понятно, то идем на сайт фрилансеров, и платим денег тем, кому понятно.