Deseo generar algunos datos que representen las coordenadas de una nube de puntos que representan un n-cubo de n dimensiones. Estos puntos deben estar distribuidos uniformemente en el n-espacio y deben poder generarse con un espaciado definido por el usuario entre ellos. Esta información se almacenará en una matriz.C++ Cómo generar el conjunto de productos cartesianos de tuplas n-dimensionales
Respuesta
He encontrado una implementación de cartesian product using Boost.MPL.
También hay un producto cartesiano real en Boost pero es una directiva de preprocesador, supongo que no sirve para usted.
Saludos que es un ejemplo útil para mí, aunque no responde completamente mi pregunta. – Ben
Para simplificar, aquí hay un ejemplo para un cubo ordinario, es decir, uno con 3 dimensiones. Deje que tenga una longitud lateral 1 y suponga que desea puntos espaciados a intervalos de 1/n. (Esto está llevando a una distribución rectangular uniforme de puntos, no del todo segura de que esto es lo que desea).
Ahora algunos pseudo-código:
for i=0;i<=n;i++ //NB i<=n because there will be n+1 points along each axis-parallel line
for j=0;j<=n;j++
for k=0;k<=n;k++
addPointAt(i/n,j/n,k/n) //float arithmetic required here
Tenga en cuenta que este no es el producto cartesiano de nada, pero parece satisfacer (un caso especial de) sus criterios. Si desea que los puntos estén espaciados de manera diferente, ajuste los índices de inicio y final del ciclo o el tamaño del intervalo.
Para generalizar esto en cualquier dimensión superior especificada es fácil, agregue más bucles.
Para generalizar a cualquier dimensión superior que no se conoce hasta el tiempo de ejecución es sólo un poco más difícil. En lugar de declarar una matriz N-dimensional, declare una matriz 1-D con la misma cantidad de elementos. Luego debe escribir la aritmética de índice explícitamente en lugar de tener que escribirlo por usted.
¡Espero que ahora me diga que esto no es lo que quiere! Si no es así, puedes aclarar.
Esto es lo que quiero, pero lo que estoy buscando es una solución general a esto, en lugar de una específica. Esto también es lo que estoy persiguiendo. Un amigo reformuló la pregunta para mí. Fue difícil explicarlo ya que no tengo ninguna formación en geometría más allá de 3 dimensiones. – Ben
@Ben: OK, entonces la solución general es que usted cree una matriz 1-D que es una representación 'aplanada' de su matriz N-D. –
Me preguntaba cómo implementar la recursión de n profundidad, así que tengo una forma genérica de generar las coordenadas para todas las n dimensiones. Tener una función que se llama a sí misma fue una de las formas en que pensé, pero esto parece innecesario y complicado. – Ben
Usted puede hacer esto de forma recursiva (pseudocódigo):
Function Hypercube(int dimensions, int current, string partialCoords)
{
for i=0, i<=steps, i++
{
if(current==dimensions)
print partialCoords + ", " + i + ")/n";
else if current==0
Hypercube(dimensions, current+1, "("+i);
else
Hypercube(dimensions, current+1, partialCoords+", "+i);
}
}
usted lo llama: Hypercube (n, 0, ""); Esto imprimirá las coordenadas de todos los puntos, pero también puede almacenarlos en una estructura.
- 1. ¿Cómo crear productos cartesianos sobre grupos arbitrarios de números en Java?
- 2. Generando tuplas de tuplas
- 3. C++ 0x: ¿se permiten tuplas de tuplas?
- 4. Generar conjunto de combinaciones de palabras en C#
- 5. Algoritmo para organizar puntos cartesianos
- 6. Cómo generar el conjunto de potencia de un conjunto en Scala
- 7. Conjunto de potencia y producto cartesiano de un conjunto de pitón
- 8. Cómo simular tuplas y conjuntos en C#?
- 9. Magento: ¿cómo obtengo productos asociados del Grupo de productos?
- 10. Administrar colecciones de tuplas en Objective-C
- 11. Agrupación Python tuplas lista de tuplas
- 12. generar todas las permutaciones posibles (o n-tuplas)
- 13. generar todos los subconjuntos de tamaño k desde un conjunto
- 14. C# API de publicidad de productos de Amazon
- 15. Cómo generar todos los caracteres en el conjunto de caracteres UTF-8 en .net
- 16. ¿Cómo consultar el número de tuplas distintas utilizando SPARQL 1.1?
- 17. Máximo de dos tuplas
- 18. Creación de nodos basada en reglas: producto comercial + conjunto de nodos de visualización de productos
- 19. Manipulando tuplas
- 20. Python: conversión de lista de listas a tuplas de tuplas
- 21. ¿Cómo combinar productos wso2?
- 22. cómo anular el conjunto en C# de propiedades automáticas
- 23. ¿Cómo añadir tuplas con
- 24. concatenación de tuplas
- 25. C++ Generar el constructor estándar
- 26. Establecer productos en Python
- 27. Cómo generar hilo en C#
- 28. C++ 0x Tuplas Almacenar elementos al revés
- 29. extracción de elementos de tuplas
- 30. Generar propiedades automáticas de C# con Codedom
es esta tarea? – Cetra
no, esto es de interés personal. – Ben