/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.chukwa.hicc;
import java.util.TreeMap;
import java.util.Map.Entry;
public class AreaCalculator {
public static TreeMap<String, Double> getAreas(
TreeMap<String, TreeMap<String, Double>> dataSet)
{
TreeMap<String, Double> areas = new TreeMap<String, Double>();
for (Entry<String, TreeMap<String, Double>> entry : dataSet.entrySet()) {
String key = entry.getKey();
Double area = getArea(entry.getValue());
areas.put(key, area);
}
return areas;
}
public static Double getArea(TreeMap<String, Double> data) {
double area = 0;
boolean first = true;
double x0, x1, y0, y1;
x0 = x1 = y0 = y1 = 0;
for (Entry<String, Double> entry : data.entrySet()) {
double x = Double.parseDouble(entry.getKey());
double y = entry.getValue();
if (first) {
x0 = x;
y0 = y;
first = false;
} else {
x1 = x;
y1 = y;
area += getArea(x0, y0, x1, y1);
x0 = x1;
y0 = y1;
}
}
return area;
}
public static Double getArea(double x0, double y0, double x1, double y1) {
return (x1 - x0) * (y0 + y1) / 2;
}
}