Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    aiuto con delle strutture dati

    salve a tutti
    Sto sviluppando un'applicazione in c++ in OpenGl, per il rendering di alcune particelle. Il mio problema è il seguente

    1 - ho creato una struttura dati chiamata grid (dove sono contenute le gridLayer, ovvero, i tasselli dell amia griglia)
    2 - ho creato una struttura dati chiamata gridLayer(dove sono contenute le particelle). Includo il codice dei file h

    class Grid {
    public:
    Grid(float posX, float posY, float posZ, float rows, float cols);
    Grid(const Grid& orig);
    Grid();
    virtual ~Grid();
    void update();
    void updatePressure();
    void updateVelocity();
    void updateViscosity();
    void updateSurfaceTension();
    void updateExternalForces();
    std::vector<GridLayer> getGridLayer();
    void addGridLayer(GridLayer g);
    void updateGradientAS(VectorR r, float h, float sum, int index);
    float getViscosity();
    float getPressure();
    float getVelocity();
    float getDensityA();
    void updateDensityA(VectorR r, float h);
    float evaluateKernelWPoly6(VectorR r, float h);
    float evaluateKernelWSpiky(VectorR r, float h);
    float evaluateKernelViscosity(VectorR r, float h);
    float evaluateSecondDerivateKernelViscosity(VectorR r, float h);
    float evaluateParticleDensity(VectorR r, float h);
    void evaluateParticlePressure(float k);
    void evaluateExternalForces();
    void evaluateViscosity(VectorR r, float h, float mu);
    float evaluateVelocityJ(VectorR r, float h);
    void resetDensityA();
    void resetPressure();
    void resetVelocity();
    void resetViscosity();
    void resetSurfaceTension();
    void resetExternalForces();
    float getPosX();
    float getPosY();
    float getPosZ();
    private:

    float posX;
    float posY;
    float posZ;

    float rows;
    float cols;
    VectorR **gradientA;
    std::vector<GridLayer> gridLayer;
    };


    class GridLayer {
    public:

    GridLayer(float labelI, float labelJ, float labelK);
    GridLayer(const GridLayer& orig);
    GridLayer();
    virtual ~GridLayer();
    int getParticlesNumber();
    Particle getParticleAt(int index);
    void addParticle(Particle p);
    std::vector<Particle> getAllParticles();
    void deleteParticleAt(int p);
    void setDistributionAs(float d);
    bool operator==(const GridLayer& gridA) const;
    bool operator!=(const GridLayer& gridA) const;
    GridLayer returnGrid();
    float getLabelI();
    float getLabelJ();
    float getLabelK();
    private:
    float labelI;
    float labelJ;
    float labelK;
    float distributionAs;
    std::vector<Particle> particles;

    };


    quando vado a creare le varie griglie, nel main, lo faccio nel seguente modo (vi posto due fogli di griglie, per semplicità)

    Grid* grid[2];
    grid[0] = new Grid(0.0,0.0,0.0,20.0,20.0);
    grid[1] = new Grid(0.1, 0.1, 0.1,20,20);

    //a questo punto, creo delle gridLayer, e inserisco una particella in ogni gridLayer

    for(int i = 0; i<2; i++)
    GridLayer* gr = new GridLayer(newI, newJ, 0);
    Particle* p = new Particle(1,1,1,newI,newJ,0,newI,newJ,0,1);
    gr->addParticle(*p);
    grid[0]->addGridLayer(*gr);
    grid[1]->addGridLayer(*gr);

    ora, qual'è il problema? è il seguente:
    In gridLayer ho un vettore di Particelle. La funzione addParticle definita nel file h e implementata in GridLayer.cpp, contiene solo l'istruzione

    particles->push_bach(p);

    e mi aggiunge la particella al vettore particles.
    Però, quando nel main controllo lo status delle particelle, mi viene detto che non ci sono particelle inserite nel vettore. Infatti, se nel main faccio

    grid[0]->getGridLayer().at(i).getParticlesNumber(), mi ritorna 0

    (nota, getParticlesNumber contiene, come istruzione, solo return this->particles.size()

    come mai? non vorrei che fosse un problema legato al passaggio per valore o per riferimento, o non so cosa... per favore, aiutatemi che sto impazzendo...

    grazie mille anticipatamente.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Il linguaggio di programmazione va sempre indicato nel titolo, il quale dovrebbe essere descrittivo del contenuto della discussione.
    Quando si posta il codice, si deve postarlo indentato all'interno degli appositi tag CODE.

    Tutto questo è scritto anche nel regolamento, fra i link in rilievo, compresa la sintassi da usare per i tag CODE.


    Sistemo io il titolo... il codice è impossibile visto che non è nemmeno indentato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    Re: Moderazione

    Originariamente inviato da LeleFT
    Il linguaggio di programmazione va sempre indicato nel titolo, il quale dovrebbe essere descrittivo del contenuto della discussione.
    Quando si posta il codice, si deve postarlo indentato all'interno degli appositi tag CODE.

    Tutto questo è scritto anche nel regolamento, fra i link in rilievo, compresa la sintassi da usare per i tag CODE.


    Sistemo io il titolo... il codice è impossibile visto che non è nemmeno indentato.


    Ciao.
    mi scuso

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.