geometria computaciona/analitica

Iniciado por + 1 Oculto(s), 8 Agosto 2016, 22:26 PM

0 Miembros y 3 Visitantes están viendo este tema.

+ 1 Oculto(s)


quiero resolver ejercicios como ser

1.- el area que comparten dos circulos
2.- el area del circulo dentro de un triangulo
3.- area del triangulo dentro de un circulo


esa clase de ejercicios en JAVA

saludos...




por ejemplo uno de los enunciados es

y una solucion que encontre en inter es la siguiente
Código (java) [Seleccionar]
import java.util.*;
import java.io.*;

public class UVa10991_Region {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

int T = Integer.parseInt(in.readLine());
while (T-- > 0) {
StringTokenizer stk = new StringTokenizer(in.readLine());
double R1 = Double.parseDouble(stk.nextToken());
double R2 = Double.parseDouble(stk.nextToken());
double R3 = Double.parseDouble(stk.nextToken());

double a = R2 + R3;
double b = R1 + R3;
double c = R1 + R2;

double alpha = Math.acos((b * b + c * c - a * a) / (2.0 * b * c));
double beta = Math.acos((a * a + c * c - b * b) / (2.0 * a * c));
double gamma = Math.acos((a * a + b * b - c * c) / (2.0 * a * b));

double s = (a + b + c) / 2.0;
double A = Math.sqrt(s * (s - a) * (s - b) * (s - c));

double slice1 = alpha * R1 * R1 / 2.0;
double slice2 = beta * R2 * R2 / 2.0;
double slice3 = gamma * R3 * R3 / 2.0;

double res = A - slice1 - slice2 - slice3;
System.out.printf(Locale.ENGLISH, "%.6f%n", res);
}

in.close();
System.exit(0);
}
}


me ayudan a comentarlo, no entiendo mucho

MOD EDIT: No hacer doble post.

AlbertoBSD

Código (java) [Seleccionar]
import java.util.*;
import java.io.*;

public class UVa10991_Region {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader para leer el archivo

int T = Integer.parseInt(in.readLine()); // Obtenemos el primer Entero T (Primer Linea)
while (T-- > 0) {// Mientras T sea mayor que cero, entramos al ciclo y decrementos T en 1
StringTokenizer stk = new StringTokenizer(in.readLine()); //Generamos un tokenizaer, para separar los elementos en tokens
//Leemos las siguientes RN variables
double R1 = Double.parseDouble(stk.nextToken());
double R2 = Double.parseDouble(stk.nextToken());
double R3 = Double.parseDouble(stk.nextToken());
//Calulamos
double a = R2 + R3;
double b = R1 + R3;
double c = R1 + R2;

double alpha = Math.acos((b * b + c * c - a * a) / (2.0 * b * c));
double beta = Math.acos((a * a + c * c - b * b) / (2.0 * a * c));
double gamma = Math.acos((a * a + b * b - c * c) / (2.0 * a * b));

double s = (a + b + c) / 2.0;
double A = Math.sqrt(s * (s - a) * (s - b) * (s - c));

double slice1 = alpha * R1 * R1 / 2.0;
double slice2 = beta * R2 * R2 / 2.0;
double slice3 = gamma * R3 * R3 / 2.0;

double res = A - slice1 - slice2 - slice3;
System.out.printf(Locale.ENGLISH, "%.6f%n", res);//Imprimimos el resultado con al menos  6 decimales
}

in.close();
System.exit(0);
}
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

pero que hace esta porcion de codigo?
double alpha = Math.acos((b * b + c * c - a * a) / (2.0 * b * c));
double beta = Math.acos((a * a + c * c - b * b) / (2.0 * a * c));
double gamma = Math.acos((a * a + b * b - c * c) / (2.0 * a * b));


este codigo
double s = (a + b + c) / 2.0; calcula el radio de los tres circulos unidos sino me equivoco

AlbertoBSD

Tengo algo de tiempo que no toco Geometria Analitica, solo Calculo y Calculo Ingtegral...

Quisas te sirva alguno de esos ebooks:

https://thepiratebay.org/search/Geometry/0/99/0

Deja le hecho un Ojo bien a las formulas para ver de donde salen esos calculos y poder ayudarte mejor.

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

ivancea96

Bueno, si quieres resolver esos ejercicios, más que programar, necesitarás matemáticas xD

http://math.stackexchange.com/questions/49787/area-between-three-circles-of-differing-radii#answer-49887

En esa respuesta explican todo detalladamente.
Obtener el triángulo formado por los centros de las circunferencias, y restarle los 3 sectores de las circunferencias.

Puedes ver fácilmente equivalencias entre ese código y las fórmulas matemáticas.

AlbertoBSD

Si es cierto si unes los radios de cada circulo con un Lapiz obtines un triangulo  ;-) ;-) ;-) Y solo hay que restarles el area que si esta en los circulos.

Area del triangulo:

double A = Math.sqrt(s * (s - a) * (s - b) * (s - c));

Restante:
Código (java) [Seleccionar]
double res = A - slice1 - slice2 - slice3;

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

#6
ya entiendo



muchas gracias por su ayuda... 

ivancea96

No no. Los vértices del triángulo son los 3 centros de los círculos. Luego, solo hay que restar los 3 sectores circulares.

+ 1 Oculto(s)

uy cierto  ;-) ;-) me confundi, gracias, pero sigo con algunas dudas con este codigo de abajo


Citardouble slice1 = alpha * R1 * R1 / 2.0;
         double slice2 = beta * R2 * R2 / 2.0;
         double slice3 = gamma * R3 * R3 / 2.0;

de donde sale esa formula? se que calcula el area del circulo dentro del triangulo, pero de donde sale esa formula

ivancea96

Cita de: rn3w en 10 Agosto 2016, 15:14 PM
uy cierto  ;-) ;-) me confundi, gracias, pero sigo con algunas dudas con este codigo de abajo


de donde sale esa formula? se que calcula el area del circulo dentro del triangulo, pero de donde sale esa formula

El área de un círculo es: (Angulo/2) * Radio^2
Si es un círculo completo (Angulo = 2*PI), entonces queda PI*Radio^2, que es la fórmula típica del área del círculo.

Como el ángulo aquí es alpha, queda como (alpha/2) * Radio^2.