DomusP45
12-11-2013, 10:46
Salve a tutti,
ho chiesto questa cosa in un altro thread, ma adesso che ho le idee più chiare, devo aprire un thread a parte per poter spiegare la situazione e poter chiedere un aiuto concreto. Quindi mi scuso, ma ho fatto prima ad aprire un nuovo thread più chiaro e diretto invece che modificare quello. Ho segnalato ai moderatori di chiudere quello.
Sono un pò arrugginito in merito agli array con gli oggetti ok, ma non riesco ad uscirmene come logica in questa cosa.
Devo creare una classe "Cubo", dove il cubo viene definito da 8 punti e un puntatore a vettore di cubi, che altro non è che una lista/array di 8 oggetti cubo (se stessa in pratica) ed un intero che ne indica il livello.
Ogni oggetto cubo è identificato da un vettore di 8 oggetti punto, dove punto è una struct fatta così:
struct punto{
double x;
double y;
double z;
bool V; //valore booleano per identificare punto buono o meno
};
La classe deve essere caratterizzata da tre funzioni:
1) Inizializza: che prende in ingresso x,y,z double ed un intero div (che indica la divisione) ed instanzia un numero di cubi iniziale in base a quanto ho diviso lo spazio di partenza con div.
Esempio: viene dato x=200,y=200,z=200 e div=4. Inizializza fissa gli 8 punti dello spazio iniziale dalle misure, divide le misure di questo spazio in 4 e quindi ne vengono fuori 64 cubi contenuti. Deve restiture in output il vettore dei 64 cubi che hanno ognuno 8 punti ovviamente.
2) verifica: che prende in ingresso un vettore di cubi e verifica con una funzione di retroproiezione su un'immagine, se scartare o meno i vari cubi del vettore. Se non va bene, il cubo viene eliminato dalla vettore (e vengono contrassegnati i punti come non buoni V = false), altrimenti viene richiamata ricorsivamente su tutti i cubi buoni dopo che sono stati "esplosi" (cioè divisi in altri 8) con la funzione esplodi.
3) esplodi: prende in ingresso un cubo e lo divide in 8 cubi più piccoli (dividendo in due le tre misure in pratica) e restituisce in output il vettore di 8 sottocubi.
Il processo in pratica deve essere:
1 - lancio inizializza, che mi restituisce un vettore di tot cubi in base a quanto è stato scelto di dividere;
2 - su tali cubi, lancio verifica, che mi indicherà quali cubi sono buoni e su cui lanciare "esplodi";
ripeto il punto 2 sui cubi usciti da esplodi, fino ad un massimo livello di esplosione fissato a priori.
Il discorso in schema è il seguente:
http://img401.imageshack.us/img401/6450/03u1.jpg
Dove con P indico i punti, con "C" i cubi di partenza e con "SC" i cubi più piccoli.
Quello che dovrò ottenere alla fine è un vettore di cubi con i relativi punti selezionati (cioè contrassegnati con V true)
Lasciando perdere il "come ottenere le coordinate degli 8 punti di ogni cubo" (che attualmente non saprei come ottenerle da un punto o una sola dimensione) mi interessa capire come posso ottenere una struttura del genere? Cioè in grado di generare una struttura ramificata di quel tipo..
Il file h della classe potrebbe essere questo?
#include <array>
using namespace std;
class cubo
{
int livello; //variabile livello cubo
struct punto{
double x;
double y;
double z;
bool V; //definizione del punto co variable bool per verifica
};
public:
cubo(); //costruttore
~cubo(); //distruttore
array<unique_ptr<cubo>, 8> sottocubi; //vettore sottocubi
void inizializza(double x, double y, double z, int div);
void verifica(cubo* test);
void esplodi(cubo* test);
};
Uso visual c++ 2010 in windows 7 64bit.
Vi prego aiutatemi!!!!
ho chiesto questa cosa in un altro thread, ma adesso che ho le idee più chiare, devo aprire un thread a parte per poter spiegare la situazione e poter chiedere un aiuto concreto. Quindi mi scuso, ma ho fatto prima ad aprire un nuovo thread più chiaro e diretto invece che modificare quello. Ho segnalato ai moderatori di chiudere quello.
Sono un pò arrugginito in merito agli array con gli oggetti ok, ma non riesco ad uscirmene come logica in questa cosa.
Devo creare una classe "Cubo", dove il cubo viene definito da 8 punti e un puntatore a vettore di cubi, che altro non è che una lista/array di 8 oggetti cubo (se stessa in pratica) ed un intero che ne indica il livello.
Ogni oggetto cubo è identificato da un vettore di 8 oggetti punto, dove punto è una struct fatta così:
struct punto{
double x;
double y;
double z;
bool V; //valore booleano per identificare punto buono o meno
};
La classe deve essere caratterizzata da tre funzioni:
1) Inizializza: che prende in ingresso x,y,z double ed un intero div (che indica la divisione) ed instanzia un numero di cubi iniziale in base a quanto ho diviso lo spazio di partenza con div.
Esempio: viene dato x=200,y=200,z=200 e div=4. Inizializza fissa gli 8 punti dello spazio iniziale dalle misure, divide le misure di questo spazio in 4 e quindi ne vengono fuori 64 cubi contenuti. Deve restiture in output il vettore dei 64 cubi che hanno ognuno 8 punti ovviamente.
2) verifica: che prende in ingresso un vettore di cubi e verifica con una funzione di retroproiezione su un'immagine, se scartare o meno i vari cubi del vettore. Se non va bene, il cubo viene eliminato dalla vettore (e vengono contrassegnati i punti come non buoni V = false), altrimenti viene richiamata ricorsivamente su tutti i cubi buoni dopo che sono stati "esplosi" (cioè divisi in altri 8) con la funzione esplodi.
3) esplodi: prende in ingresso un cubo e lo divide in 8 cubi più piccoli (dividendo in due le tre misure in pratica) e restituisce in output il vettore di 8 sottocubi.
Il processo in pratica deve essere:
1 - lancio inizializza, che mi restituisce un vettore di tot cubi in base a quanto è stato scelto di dividere;
2 - su tali cubi, lancio verifica, che mi indicherà quali cubi sono buoni e su cui lanciare "esplodi";
ripeto il punto 2 sui cubi usciti da esplodi, fino ad un massimo livello di esplosione fissato a priori.
Il discorso in schema è il seguente:
http://img401.imageshack.us/img401/6450/03u1.jpg
Dove con P indico i punti, con "C" i cubi di partenza e con "SC" i cubi più piccoli.
Quello che dovrò ottenere alla fine è un vettore di cubi con i relativi punti selezionati (cioè contrassegnati con V true)
Lasciando perdere il "come ottenere le coordinate degli 8 punti di ogni cubo" (che attualmente non saprei come ottenerle da un punto o una sola dimensione) mi interessa capire come posso ottenere una struttura del genere? Cioè in grado di generare una struttura ramificata di quel tipo..
Il file h della classe potrebbe essere questo?
#include <array>
using namespace std;
class cubo
{
int livello; //variabile livello cubo
struct punto{
double x;
double y;
double z;
bool V; //definizione del punto co variable bool per verifica
};
public:
cubo(); //costruttore
~cubo(); //distruttore
array<unique_ptr<cubo>, 8> sottocubi; //vettore sottocubi
void inizializza(double x, double y, double z, int div);
void verifica(cubo* test);
void esplodi(cubo* test);
};
Uso visual c++ 2010 in windows 7 64bit.
Vi prego aiutatemi!!!!