elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ejercicios
| | | |-+  Reto - Intersección de 2 cubos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Reto - Intersección de 2 cubos  (Leído 5,653 veces)
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Reto - Intersección de 2 cubos
« en: 19 Agosto 2010, 18:10 pm »

Continuando con el post de retos de RNA, en C++, quiero hacer este, para que los que quieran resolverlo en otros lenguajes puedan hacerlo.

Reglas:
 - Toda respuesta tiene que tener código
 - Si tienen dudas SOBRE LA DESCRIPCIÓN del reto, pueden entrar al IRC o enviarme un MP.
 - No se pueden utilizar liberías para hacer los calculos, todo debe ser hecho a mano.

Ahora si, vamos:

La aplicación debe permitir al usuario ingresar dos coordenadas de dos cubos, es decir, X, Y y Z, además de la dimensiones de cada uno, obviamente una sola, ya que es un cubo :D. El resultado será el volumen de la intersección en caso de que sea afirmativa, y sino decir que no hay intersección alguna.

Pondré los resultados acá, habrá un ganador por cada lenguaje :)

RESULTADOS

C++: ghastlyX


« Última modificación: 19 Agosto 2010, 21:34 pm por [D4N93R] » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Reto - Intersección de 2 cubos
« Respuesta #1 en: 19 Agosto 2010, 21:09 pm »

Ahora si

Código
  1.  
  2. using System;
  3.  
  4. namespace InterCubos
  5. {
  6.    class Program
  7.    {
  8.        static void Main(string[] args)
  9.        {
  10.            Console.WriteLine("Cubo al cubo!" + System.Environment.NewLine);
  11.            Cubo cubo1 = new Cubo();
  12.            Cubo cubo2 = new Cubo();
  13.  
  14.            int temp;
  15.  
  16.            Console.WriteLine("Ingrese datos del primer cubo: ");
  17.            Console.Write("X:");
  18.            while (!int.TryParse(Console.ReadLine(), out temp))
  19.            {
  20.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  21.                Console.Write("X:");
  22.            }
  23.            cubo1.ubicacion.x = temp;
  24.            Console.Write("Y:");
  25.            while (!int.TryParse(Console.ReadLine(), out temp))
  26.            {
  27.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  28.                Console.Write("Y:");
  29.            }
  30.            cubo1.ubicacion.y = temp;
  31.            Console.Write("Z:");
  32.            while (!int.TryParse(Console.ReadLine(), out temp))
  33.            {
  34.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  35.                Console.Write("Z:");
  36.            }
  37.            cubo1.ubicacion.z = temp;
  38.            Console.Write("Tamaño:");
  39.            while (!int.TryParse(Console.ReadLine(), out temp))
  40.            {
  41.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  42.                Console.Write("Tamaño:");
  43.            }
  44.            cubo1.tamaño = temp;
  45.  
  46.            Console.WriteLine("Ingrese datos del segundo cubo: ");
  47.            Console.Write("X:");
  48.            while (!int.TryParse(Console.ReadLine(), out temp))
  49.            {
  50.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  51.                Console.Write("X:");
  52.            }
  53.            cubo2.ubicacion.x = temp;
  54.            Console.Write("Y:");
  55.            while (!int.TryParse(Console.ReadLine(), out temp))
  56.            {
  57.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  58.                Console.Write("Y:");
  59.            }
  60.            cubo2.ubicacion.y = temp;
  61.            Console.Write("Z:");
  62.            while (!int.TryParse(Console.ReadLine(), out temp))
  63.            {
  64.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  65.                Console.Write("Z:");
  66.            }
  67.            cubo2.ubicacion.z = temp;
  68.            Console.Write("Tamaño:");
  69.            while (!int.TryParse(Console.ReadLine(), out temp))
  70.            {
  71.                Console.WriteLine("ERROR: ingrese un valor numerico entero");
  72.                Console.Write("Tamaño:");
  73.            }
  74.            cubo2.tamaño = temp;
  75.  
  76.            if (cubo1.isCollisioning(cubo2))
  77.                Console.WriteLine("Los cubos estan chocando!");
  78.            else
  79.                Console.WriteLine("Los cubos no estan ni cerca ¬¬");
  80.  
  81.            Console.ReadLine();
  82.        }
  83.    }
  84.    class Cubo
  85.    {
  86.        public Punto ubicacion { get; set; }
  87.        public int tamaño { get; set; }
  88.  
  89.        public Cubo()
  90.        {
  91.            ubicacion = new Punto();
  92.            tamaño = 0;
  93.        }
  94.  
  95.        public bool isCollisioning(Cubo elCubo)
  96.        {
  97.            if (entre(elCubo.ubicacion.x, this.ubicacion.x, this.ubicacion.x + this.tamaño, elCubo.ubicacion.x + elCubo.tamaño)) return true;
  98.            if (entre(elCubo.ubicacion.y, this.ubicacion.y, this.ubicacion.y + this.tamaño, elCubo.ubicacion.y + elCubo.tamaño)) return true;
  99.            if (entre(elCubo.ubicacion.z, this.ubicacion.z, this.ubicacion.z + this.tamaño, elCubo.ubicacion.z + elCubo.tamaño)) return true;
  100.            return false;
  101.        }
  102.  
  103.        private bool entre(int i, int valor, int d) {
  104.            return entre(i, valor, valor, d);
  105.        }
  106.        private bool entre(int i, int valorMin, int valorMax, int d)
  107.        {
  108.            // Cambiar por esta linea si se quiere saber si esta un cubo dentro de otro
  109.            // return (valorMin >= i) && (valorMax <= d);
  110.            return (valorMin >= i) || (valorMax <= d);
  111.        }
  112.    }
  113.    class Punto
  114.    {
  115.        public int x { get; set; }
  116.        public int y { get; set; }
  117.        public int z { get; set; }
  118.        public Punto() {
  119.            x = y = z = 0;
  120.        }
  121.    }
  122. }
  123.  
Fixed :P

No se que proponer como reto :P :xD


« Última modificación: 19 Agosto 2010, 21:27 pm por raul338 » En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Reto - Intersección de 2 cubos
« Respuesta #2 en: 19 Agosto 2010, 21:28 pm »

Raul, no estás mostrando el VOLUMEN resultante de la intersección!
En línea

ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Reto - Intersección de 2 cubos
« Respuesta #3 en: 19 Agosto 2010, 21:28 pm »

Pongo la mía, en C++. El formato de entrada es la longitud del lado del cubo y a continuación las coordenadas del vértice con coordenadas más pequeñas. Por ejemplo, si se quiere la intersección del cubo de lado 4 con vértice de menores coordenadas en (0,0,0) con el cubo de lado 3 con vértice de menores coordenadas en (-1,-1,-1), la entrada sería así:
Citar
4
0 0 0
3
-1 -1 -1

Y la salida devuelve el volumen de la intersección (devuelve 0 si la intersección es vacía).
Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. void lee(vector<int>& v) {
  6.    int len;
  7.    cin >> len;
  8.    for (int i = 0; i < 3; ++i) {
  9.        cin >> v[i];
  10.        v[i + 3] = v[i] + len;
  11.    }
  12. }
  13.  
  14. int main() {
  15.    vector<int> A(6), B(6);
  16.    int res = 1;
  17.    lee(A); lee(B);
  18.    for (int i = 0; i < 3; ++i) A[i] = max(A[i], B[i]);
  19.    for (int i = 3; i < 6; ++i) A[i] = min(A[i], B[i]);
  20.    for (int i = 0; i < 3; ++i) res *= max(0, A[3 + i] - A[i]);
  21.    cout << res << endl;
  22. }
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Reto - Intersección de 2 cubos
« Respuesta #4 en: 19 Agosto 2010, 21:36 pm »

Muy bien, ya tenemos el de C++, y C# está encaminado, esperamos por los demás!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Alcatel-Lucent sustituye las antenas base por diminutos cubos de 300 gramos
Noticias
wolfbcn 0 953 Último mensaje 9 Febrero 2011, 16:01 pm
por wolfbcn
Calcular la intersección de dos segmentos
Programación C/C++
DickGumshoe 6 11,992 Último mensaje 31 Octubre 2011, 23:11 pm
por DickGumshoe
Intersección de recta y punto
Programación C/C++
kaostias 4 2,249 Último mensaje 26 Noviembre 2013, 18:23 pm
por kaostias
Intersección linea - triángulo « 1 2 »
Programación C/C++
BlackM4ster 11 4,534 Último mensaje 20 Julio 2014, 21:31 pm
por leosansan
Cubos de Nicoman
Programación C/C++
Beginner Web 1 591 Último mensaje 28 Mayo 2019, 14:59 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines