Posted: Mon Mar 06, 2006 12:05 pm
you'll need to somehow use cosine theorem for this problem.
Code: Select all
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
public class Region {
public static void main(String[] args) throws IOException {
BufferedReader entradas = new BufferedReader(new InputStreamReader(
System.in));
StringBuilder saida = new StringBuilder();
DecimalFormat formato = new DecimalFormat("0.000000");
formato.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
int casos = Integer.parseInt(entradas.readLine().trim());
for (int i = 0; i < casos; i++) {
String[] valores = entradas.readLine().trim().split("\\s+");
double raioUm = Double.parseDouble(valores[0]);
double raioDois = Double.parseDouble(valores[1]);
double raioTres = Double.parseDouble(valores[2]);
double ladoUm = raioUm + raioDois;
double ladoDois = raioTres + raioDois;
double ladoTres = raioUm + raioTres;
double semiPerimetro = (ladoUm + ladoDois + ladoTres)/2;
double areaTriangulo = Math.sqrt((semiPerimetro
* (semiPerimetro - ladoUm) * (semiPerimetro - ladoDois)
* (semiPerimetro - ladoTres)));
double cosA = Math.cos((Math.pow(ladoTres, 2) + Math.pow(ladoUm, 2)
- Math.pow(ladoDois, 2)) / (2 * ladoTres * ladoUm));
double cosB = Math.cos((Math.pow(ladoDois, 2) + Math.pow(ladoUm, 2)
- Math.pow(ladoTres, 2)) / (2 * ladoDois * ladoUm));
double cosC = Math.cos((Math.pow(ladoDois, 2) + Math.pow(ladoTres, 2)
- Math.pow(ladoUm, 2)) / (2 * ladoDois * ladoTres));
double a = Math.acos(cosA);
double b = Math.acos(cosB);
double c = Math.acos(cosC);
double areaSetorUm = 0.5 * a * Math.pow(raioUm, 2);
double areaSetorDois = 0.5 * b * Math.pow(raioDois, 2);
double areaSetorTres = 0.5 * c * Math.pow(raioTres, 2);
double areaSetores = areaSetorUm + areaSetorDois + areaSetorTres;
System.out.println(formato.format(areaTriangulo - areaSetores));
}
}
}