Foro de elhacker.net

Programación => Java => Mensaje iniciado por: + 1 Oculto(s) en 8 Agosto 2016, 22:26 pm



Título: geometria computaciona/analitica
Publicado por: + 1 Oculto(s) en 8 Agosto 2016, 22:26 pm

 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
(http://thumbs.subefotos.com/968b4d5ba3b4fb6d2b3cd8e37f911f15o.jpg) (http://subefotos.com/ver/?968b4d5ba3b4fb6d2b3cd8e37f911f15o.png)
y una solucion que encontre en inter es la siguiente
Código
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class UVa10991_Region {
  5. public static void main(String[] args) throws IOException {
  6.  
  7. int T = Integer.parseInt(in.readLine());
  8. while (T-- > 0) {
  9. StringTokenizer stk = new StringTokenizer(in.readLine());
  10. double R1 = Double.parseDouble(stk.nextToken());
  11. double R2 = Double.parseDouble(stk.nextToken());
  12. double R3 = Double.parseDouble(stk.nextToken());
  13.  
  14. double a = R2 + R3;
  15. double b = R1 + R3;
  16. double c = R1 + R2;
  17.  
  18. double alpha = Math.acos((b * b + c * c - a * a) / (2.0 * b * c));
  19. double beta = Math.acos((a * a + c * c - b * b) / (2.0 * a * c));
  20. double gamma = Math.acos((a * a + b * b - c * c) / (2.0 * a * b));
  21.  
  22. double s = (a + b + c) / 2.0;
  23. double A = Math.sqrt(s * (s - a) * (s - b) * (s - c));
  24.  
  25. double slice1 = alpha * R1 * R1 / 2.0;
  26. double slice2 = beta * R2 * R2 / 2.0;
  27. double slice3 = gamma * R3 * R3 / 2.0;
  28.  
  29. double res = A - slice1 - slice2 - slice3;
  30. System.out.printf(Locale.ENGLISH, "%.6f%n", res);
  31. }
  32.  
  33. in.close();
  34. System.exit(0);
  35. }
  36. }

me ayudan a comentarlo, no entiendo mucho

MOD EDIT: No hacer doble post.


Título: Re: geometria computaciona/analitica
Publicado por: AlbertoBSD en 9 Agosto 2016, 22:50 pm
Código
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class UVa10991_Region {
  5. public static void main(String[] args) throws IOException {
  6. BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader para leer el archivo
  7.  
  8. int T = Integer.parseInt(in.readLine()); // Obtenemos el primer Entero T (Primer Linea)
  9. while (T-- > 0) {// Mientras T sea mayor que cero, entramos al ciclo y decrementos T en 1
  10. StringTokenizer stk = new StringTokenizer(in.readLine()); //Generamos un tokenizaer, para separar los elementos en tokens
  11. //Leemos las siguientes RN variables
  12. double R1 = Double.parseDouble(stk.nextToken());
  13. double R2 = Double.parseDouble(stk.nextToken());
  14. double R3 = Double.parseDouble(stk.nextToken());
  15. //Calulamos
  16. double a = R2 + R3;
  17. double b = R1 + R3;
  18. double c = R1 + R2;
  19.  
  20. double alpha = Math.acos((b * b + c * c - a * a) / (2.0 * b * c));
  21. double beta = Math.acos((a * a + c * c - b * b) / (2.0 * a * c));
  22. double gamma = Math.acos((a * a + b * b - c * c) / (2.0 * a * b));
  23.  
  24. double s = (a + b + c) / 2.0;
  25. double A = Math.sqrt(s * (s - a) * (s - b) * (s - c));
  26.  
  27. double slice1 = alpha * R1 * R1 / 2.0;
  28. double slice2 = beta * R2 * R2 / 2.0;
  29. double slice3 = gamma * R3 * R3 / 2.0;
  30.  
  31. double res = A - slice1 - slice2 - slice3;
  32. System.out.printf(Locale.ENGLISH, "%.6f%n", res);//Imprimimos el resultado con al menos  6 decimales
  33. }
  34.  
  35. in.close();
  36. System.exit(0);
  37. }
  38. }


Título: Re: geometria computaciona/analitica
Publicado por: + 1 Oculto(s) en 9 Agosto 2016, 22:58 pm
pero que hace esta porcion de codigo?
Código:
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
Código:
double s = (a + b + c) / 2.0;
calcula el radio de los tres circulos unidos sino me equivoco


Título: Re: geometria computaciona/analitica
Publicado por: AlbertoBSD en 9 Agosto 2016, 23:08 pm
Tengo algo de tiempo que no toco Geometria Analitica, solo Calculo y Calculo Ingtegral...

Quisas te sirva alguno de esos ebooks:

Código:
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!


Título: Re: geometria computaciona/analitica
Publicado por: ivancea96 en 10 Agosto 2016, 01:07 am
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 (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.


Título: Re: geometria computaciona/analitica
Publicado por: AlbertoBSD en 10 Agosto 2016, 01:43 am
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:

Código
  1. double A = Math.sqrt(s * (s - a) * (s - b) * (s - c));

Restante:
Código
  1. double res = A - slice1 - slice2 - slice3;



Título: Re: geometria computaciona/analitica
Publicado por: + 1 Oculto(s) en 10 Agosto 2016, 02:51 am
ya entiendo

(http://thumbs.subefotos.com/2e87570ab3f0449cc62556aa47b88cf4o.jpg) (http://subefotos.com/ver/?2e87570ab3f0449cc62556aa47b88cf4o.jpg)

muchas gracias por su ayuda... 


Título: Re: geometria computaciona/analitica
Publicado por: ivancea96 en 10 Agosto 2016, 12:51 pm
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.


Título: Re: geometria computaciona/analitica
Publicado por: + 1 Oculto(s) en 10 Agosto 2016, 15:14 pm
uy cierto  ;-) ;-) me confundi, gracias, pero sigo con algunas dudas con este codigo de abajo


Citar
double 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


Título: Re: geometria computaciona/analitica
Publicado por: ivancea96 en 10 Agosto 2016, 16:06 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.


Título: Re: geometria computaciona/analitica
Publicado por: + 1 Oculto(s) en 10 Agosto 2016, 16:37 pm
ahora si ya entiendo mejor, gracias ivancea96 , AlbertoBSD

muchas gracias...