Algoritmo en dos dimensiones

Iniciado por DanFire, 15 Abril 2016, 18:24 PM

0 Miembros y 1 Visitante están viendo este tema.

DanFire

Buenas!
tengo un problemilla que no sé resolver a ver si vosotros se os occure algo ;)
Esto es lo que tengo:
Un vector de massas (es francés) dnd massa es una classe:
std::vector<Masse>

Y dentro de esa clase tengo los atributos siguientes:
private:
Vecteur3D mPosition;
Vecteur3D mVitesse;
Vecteur3D mForceS;
std::vector<Ressort*> mEnsRes;
double mMasse;
double mCoefFrott;
CoordIJ mCoordIJ;
///-----------------------------Dans le cas ou coeff est pareil partout, ou pour definir val par défaut.
static double msCoeffCste;

position, velocidad y demas cosas sin importancia... Lo que importa que que la clase masa tiene un atributo  :

typedef std::array <size_t, 2> CoordIJ;

CoordIJ mCoordIJ

(el typedef esta afuera pero es para que veais lo que es ;) )
Este atributo en especial cuado esta inicializado posee las coordenadas de su posicion en otro vector  pero de dos dimensiones tal que asi:

typedef std::vector<std::vector<Masse> >  TabMasses2D

En definitiva lo que me gustaria seria poder pasar de mi 1era dimension que posee las coordenadas de la segunda a la segunda XD.
Pero notese que el vector de una dimesion las masas que estan dentro no tienen por que estar en orden y puede tambien pasar lo siguiente:

massa m1;
massa m2;
m1.coordenadasEn2D( 2, 5);
m1.coordenadasEn2D( 7,0);

es decir que el resto de las "cuadriculas" (asi me lo imagino) estarian vacias.
Un pseudo codigo me bastaria de sobra o nada mas que la parte algoritmica. Estoy desesperado espero que alguien pueda ayudarme...

Gracias de antemano y saludos!
pd: aqui teneis el prototipo de mi funcion:
TabMasses2D Dim1toDim2(std::vector<Masse> const&);

HardForo

Estoy casi seguro que @MAFUS y otros lo puedan "cazar al vuelo" pero a muchos mas podrian ayudarte si colocas el codigo completo.
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

ivancea96

Quieres crear un array bidimensional de esa clase a partir de un array unidimensional, hasta ahí bien.
Pero, ¿cómo quieres hacerlo? No entiendo cómo quieres crear el array bidimensional a partir del array unidimensional. ¿Qué pasos quieres seguir?

MAFUS

A ver si entiendo el concepto que estás intentando realizar.
Tienes un conjunto de particulas en un entorno tridimensional, un cubo.
Por lo que veo en la definición de sus propiedades,  estas partículas van a interactuar entre sí unas con otras.
Has guardado tus partículas en un array, contienen la información en el momento t
Quieres otro array para que te guarde todas las partículas otra ves pero actualizadas al momento t+1.

DanFire

Buenas!
He cambiado mi concepcion, era una mala idea y demasiado complicado.. En el mejor de los casos tenia que hacer n operaciones y en el peor  n^3. Pero gracias!
Si os pica la curiosidad o teneis consejos que darme os puedo enviar el codigo por privado pero no puedo compartirlo asi en internet, me arriesgaria demasiado.
MAFUS estas casi en lo correcto!
Saludos

MAFUS

Pues si estoy en casi lo correcto busca un juego, lo más sencillo que encuentres, del juego de la vida de Conway.
Trabajas de la siguiente forma:
Tienes un array que es tu mundo en el presente, en el momento T.
Tienes un array que representa tu mundo en el momento T+1.
Para rellenar éste último array lo que haces es a cada partícula de T aplicas los cálculos de física sobre todos sus vecinos en el momento T. A la partícula actualizada la guardas en el array de T+1.
Finalizadas todas las partículas copias T+1 a T, o mediante punteros (será más rápido) conviertes el array T+1 en el array T y el que era el T servirá para situar los datos de T+1, y lo presentas por pantalla, o lo que sea que tengas que hacer para representar los datos.
Vuelves a empezar.