Я хотел бы иметь возможность узнать общую площадь, охватываемую областью (например, двойной интеграл по этой области). Я не могу найти какой-либо метод для этого, и мне интересно, будет ли я идти пополам. Спасибо заранее!Расчет общей площади региона
ответ
Вы должны иметь возможность использовать RegionIterator
и суммировать области возвращенных прямоугольников.
Рассуждение: в документах Andriod подразумевается, что при выполнении булевых операций в регионах область результатов представляет собой новый набор неперекрывающихся прямоугольников с желаемым объединением. Другими словами, A - B
, где A и B являются прямоугольниками, в результате могут образовывать 0, 1, 2, 3 или 4 прямоугольника.
Я не тестировал, но источник на the Android xRef site показывает, что проверенная область состоит из прямоугольников без перекрытий.
Кажется, у меня такая же проблема, как и ваша проблема.
Я не уверен, если это «реальное» решение. Но я отправляю свой код. Значения выглядят нормально.
private void calculateArea(Region region) {
RegionIterator regionIterator = new RegionIterator(region);
int size = 0; // amount of Rects
float area = 0; // units of area
Rect tmpRect= new Rect();
while (regionIterator.next(tmpRect)) {
size++;
area += tmpRect.width() * tmpRect.height();
}
log.d("Rect amount=" + size);
log.d("Area Size/units of area=" + area);
}
}
Моя проблема в том, что я хочу получить размер области некоторых рисованных рисунков. Чтобы узнать о тротуарах, я добавил регион.
Спасибо за ответ. Регион сохраняется как регион Android, так как мне нужна его Op.DIFFERENCE и getBoundaryPath(). Я не уверен, могу ли я перебирать вершины. – scf
Значит, это действительно набор возможных перекрывающихся прямоугольников? (Определение региона Android странно по сравнению с любым другим.) – Gene
Я сейчас просто читаю его. Если бы они не перекрывали друг друга, было бы легко просто перебрать их. Может быть, мне придется использовать принцип исключения включения, хотя я бы предпочел метод, который не будет занимать много времени. – scf