Autor
|
Tema: Reto - Intersección de 2 cubos (Leído 7,924 veces)
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
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 . 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 RESULTADOSC++: ghastlyX
|
|
« Última modificación: 19 Agosto 2010, 21:34 pm por [D4N93R] »
|
En línea
|
|
|
|
raul338
Desconectado
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
Ahora si using System; namespace InterCubos { class Program { static void Main(string[] args) { Console.WriteLine("Cubo al cubo!" + System.Environment.NewLine); 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() { 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 No se que proponer como reto
|
|
« Última modificación: 19 Agosto 2010, 21:27 pm por raul338 »
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Raul, no estás mostrando el VOLUMEN resultante de la intersección!
|
|
|
En línea
|
|
|
|
ghastlyX
Ex-Staff
Desconectado
Mensajes: 1.900
|
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í: 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). #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
Mensajes: 1.646
My software never has bugs. Its just features!
|
Muy bien, ya tenemos el de C++, y C# está encaminado, esperamos por los demás!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Alcatel-Lucent sustituye las antenas base por diminutos cubos de 300 gramos
Noticias
|
wolfbcn
|
0
|
1,588
|
9 Febrero 2011, 16:01 pm
por wolfbcn
|
|
|
Calcular la intersección de dos segmentos
Programación C/C++
|
DickGumshoe
|
6
|
15,926
|
31 Octubre 2011, 23:11 pm
por DickGumshoe
|
|
|
Intersección de recta y punto
Programación C/C++
|
kaostias
|
4
|
3,787
|
26 Noviembre 2013, 18:23 pm
por kaostias
|
|
|
Intersección linea - triángulo
« 1 2 »
Programación C/C++
|
BlackM4ster
|
11
|
7,681
|
20 Julio 2014, 21:31 pm
por leosansan
|
|
|
Cubos de Nicoman
Programación C/C++
|
Beginner Web
|
1
|
1,802
|
28 Mayo 2019, 14:59 pm
por K-YreX
|
|