elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
27 Mayo 2012, 10:19  


Tema destacado:


+  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 1,555 veces)
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


My software never has bugs. Its just features!


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

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 por [D4N93R] » En línea

raul338


Desconectado Desconectado

Mensajes: 2.371


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 »

Ahora si

Código
 
using System;
 
namespace InterCubos
{
   class Program
   {
       static void Main(string[] args)
       {
           Console.WriteLine("Cubo al cubo!" + System.Environment.NewLine);
           Cubo cubo1 = new Cubo();
           Cubo cubo2 = new Cubo();
 
           int temp;
 
           Console.WriteLine("Ingrese datos del primer cubo: ");
           Console.Write("X:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("X:");
           }
           cubo1.ubicacion.x = temp;
           Console.Write("Y:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("Y:");
           }
           cubo1.ubicacion.y = temp;
           Console.Write("Z:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("Z:");
           }
           cubo1.ubicacion.z = temp;
           Console.Write("Tamaño:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("Tamaño:");
           }
           cubo1.tamaño = temp;
 
           Console.WriteLine("Ingrese datos del segundo cubo: ");
           Console.Write("X:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("X:");
           }
           cubo2.ubicacion.x = temp;
           Console.Write("Y:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("Y:");
           }
           cubo2.ubicacion.y = temp;
           Console.Write("Z:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("Z:");
           }
           cubo2.ubicacion.z = temp;
           Console.Write("Tamaño:");
           while (!int.TryParse(Console.ReadLine(), out temp))
           {
               Console.WriteLine("ERROR: ingrese un valor numerico entero");
               Console.Write("Tamaño:");
           }
           cubo2.tamaño = temp;
 
           if (cubo1.isCollisioning(cubo2))
               Console.WriteLine("Los cubos estan chocando!");
           else
               Console.WriteLine("Los cubos no estan ni cerca ¬¬");
 
           Console.ReadLine();
       }
   }
   class Cubo
   {
       public Punto ubicacion { get; set; }
       public int tamaño { get; set; }
 
       public Cubo()
       {
           ubicacion = new Punto();
           tamaño = 0;
       }
 
       public bool isCollisioning(Cubo elCubo)
       {
           if (entre(elCubo.ubicacion.x, this.ubicacion.x, this.ubicacion.x + this.tamaño, elCubo.ubicacion.x + elCubo.tamaño)) return true;
           if (entre(elCubo.ubicacion.y, this.ubicacion.y, this.ubicacion.y + this.tamaño, elCubo.ubicacion.y + elCubo.tamaño)) return true;
           if (entre(elCubo.ubicacion.z, this.ubicacion.z, this.ubicacion.z + this.tamaño, elCubo.ubicacion.z + elCubo.tamaño)) return true;
           return false;
       }
 
       private bool entre(int i, int valor, int d) {
           return entre(i, valor, valor, d);
       }
       private bool entre(int i, int valorMin, int valorMax, int d)
       {
           // Cambiar por esta linea si se quiere saber si esta un cubo dentro de otro
           // return (valorMin >= i) && (valorMax <= d);
           return (valorMin >= i) || (valorMax <= d);
       }
   }
   class Punto
   {
       public int x { get; set; }
       public int y { get; set; }
       public int z { get; set; }
       public Punto() {
           x = y = z = 0;
       }
   }
}
 
Fixed :P

No se que proponer como reto :P :xD


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

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


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 »

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

ghastlyX
Colaborador
***
Desconectado Desconectado

Mensajes: 1.894



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

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
#include <iostream>
#include <vector>
using namespace std;
 
void lee(vector<int>& v) {
   int len;
   cin >> len;
   for (int i = 0; i < 3; ++i) {
       cin >> v[i];
       v[i + 3] = v[i] + len;
   }
}
 
int main() {
   vector<int> A(6), B(6);
   int res = 1;
   lee(A); lee(B);
   for (int i = 0; i < 3; ++i) A[i] = max(A[i], B[i]);
   for (int i = 3; i < 6; ++i) A[i] = min(A[i], B[i]);
   for (int i = 0; i < 3; ++i) res *= max(0, A[3 + i] - A[i]);
   cout << res << endl;
}
En línea
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.647


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 »

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 388 Último mensaje 9 Febrero 2011, 16:01
por wolfbcn
Calcular la intersección de dos segmentos
Programación C/C++
DickGumshoe 6 881 Último mensaje 31 Octubre 2011, 23:11
por DickGumshoe
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines