AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez
 

 CBNA Rebirth Days

Aller en bas 
Aller à la page : Précédent  1 ... 8 ... 12, 13, 14 ... 17 ... 22  Suivant
AuteurMessage
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyVen 25 Sep 2015 - 15:28

Je note, j'y avais fait en salle info quand j'avais une heure de perm à rien faire, et l'internet était si pourri que j'ai attendu 5 minutes pour ouvrir cpp.sh donc c'était impossible de voir la doc huhu

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyVen 2 Oct 2015 - 22:12

CBNA Rebirth Days - Page 13 Gb4hnup

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
arthuro
Utilisateur confirmé: Rang ****
arthuro

Messages : 1448
Localisation : Paris
Projet Actuel : Diagon https://arthursonzogni.com/Diagon

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyVen 2 Oct 2015 - 23:22

Tu prépare un simulateur de nichoirs d'oiseaux ?
C'est pour Planet Centauri ?

_________________
CBNA Rebirth Days - Page 13 PochetteCBNA Rebirth Days - Page 13 Signature.php?gid=588
D'autres jeux :
In The Cube
In the cube 2
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptySam 3 Oct 2015 - 7:21

arthuro a écrit:
Tu prépare un simulateur de nichoirs d'oiseaux ?
C'est pour Planet Centauri ?
Ça en a l'air, élever des piafs ça peut être utile Very Happy

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****
hyper

Messages : 1434

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptySam 3 Oct 2015 - 7:45

On veut des pouleeeets \o/

Plus sérieusement, vraiment pas mal comme d'hab, on voit bien que c'est du bois beh

_________________
côt.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptySam 3 Oct 2015 - 8:10

arthuro a écrit:
Tu prépare un simulateur de nichoirs d'oiseaux ?
C'est pour Planet Centauri ?

Héhé yep, par contre ce sera pour plus tard car j'ai pas encore programmé les IA des piafs Razz

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyLun 5 Oct 2015 - 11:29

Petite implentation d'un algorithme de raster de triangles en C++. On peut définir le caractère affiché dans la console, la taille et les coord de chaque vertex du triangle. Fait en moins de deux heures au lycée avec cpp.sh o/
Code:
#include <iostream>
#include <math.h>
#include <vector>
#include <algorithm>

struct vec2f
{
    float x, y;
};

struct triangle
{
    vec2f vt1, vt2, vt3;
};

class rasterizer
{
public:
    /// Defines the size of the rendering output.
    void defineSize(const float width, const float height)
    {
        wid = width;
        hei = height;
    }
    
    /// Raster a triangle
    virtual void rasterTriangle(triangle tri) = 0;
    
    /// Returns a pixel's data (depends on the output type, usually 3 RGB / 1 char)
    virtual void* getPixelData(vec2f pos) = 0;

private:
    float wid, hei;
};

/// Returns the cross product of two 2D vectors
float crossProduct(const vec2f a, const vec2f b)
{
    return (a.x * b.y) - (a.y * b.x);
}

class softRasterizer : rasterizer
{
public:
    softRasterizer(const float width, const float height)
    {
        defineSize(width, height);
        
        grid.resize(width);
        for (auto& row : grid)
        {
            row.resize(height);
            for (auto& pix : row)
            {
                pix = ' ';
            }
        }
    }
    
    /// Sets the character used to fill pixels in a triangle
    void setFillingCharacter(const char fill)
    {
        fillChar = fill;
    }
    
    /// Returns a character in the grid @TODO : Move to rasterizer class?
    void* getPixelData(vec2f pos)
    {
        return &grid[pos.x][pos.y];
    }
    
    /// Raster a triangle using the Barycentric algorithm.
    void rasterTriangle(triangle tri)
    {
        using namespace std;
        
        const vec2f vt1 = tri.vt1, vt2 = tri.vt2, vt3 = tri.vt3;
        
        auto xcoord = std::minmax({vt1.x, vt2.x, vt3.x});
        auto ycoord = std::minmax({vt1.y, vt2.y, vt3.y});
        
        vec2f tl = { xcoord.first,  ycoord.first  };
        vec2f br = { xcoord.second, ycoord.second };
        
        vec2f vs1 = { vt2.x - vt1.x, vt2.y - vt1.y };
        vec2f vs2 = { vt3.x - vt1.x, vt3.y - vt1.y };
        
        for (int x = tl.x; x <= br.x; ++x)
        {
            for (int y = tl.y; y <= br.y; ++y)
            {
                vec2f q = { x - vt1.x, y - vt1.y };
                
                float c = crossProduct(vs1, vs2);
                
                float s = crossProduct(q, vs2) / c;
                float t = crossProduct(vs1, q) / c;
                
                if ((s >= 0) && (t >= 0) && (s + t <= 1))
                {
                    grid[x][y] = fillChar;
                }
            }
        }
    }
    
    /// Renders the grid to the console.
    void renderConsole()
    {
        for (unsigned j = 0; j < grid.size(); ++j)
        {
            for (unsigned i = 0; i < grid[0].size(); ++i)
            {
                std::cout << grid[i][j];
            }
            std::cout << std::endl;
        }
    }
    
private:
    char fillChar = 'O';
    std::vector<std::vector<char>> grid;
};

int main()
{
    std::cout << "Preparing the rasterizer" << std::endl;
    softRasterizer raster(75, 75);
    
    std::cout << "Rasterizing triangles" << std::endl;
    
    raster.setFillingCharacter('@');
    raster.rasterTriangle( { {5, 5}, {25, 65}, {60, 35} } );
    
    std::cout << "Console rendering..." << std::endl;
    raster.renderConsole();
    
    return EXIT_SUCCESS;
}
Des améliorations à faire?
Exemple de sortie :
Code:
Preparing the rasterizer
Rasterizing triangles
Console rendering...
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
     @                                                                    
      @                                                                    
      @@@                                                                  
      @@@@@                                                                
       @@@@@@                                                              
       @@@@@@@@                                                            
       @@@@@@@@@@                                                          
        @@@@@@@@@@                                                        
        @@@@@@@@@@@@                                                      
        @@@@@@@@@@@@@@                                                    
         @@@@@@@@@@@@@@@                                                  
         @@@@@@@@@@@@@@@@@                                                
         @@@@@@@@@@@@@@@@@@@                                              
          @@@@@@@@@@@@@@@@@@@                                              
          @@@@@@@@@@@@@@@@@@@@@                                            
          @@@@@@@@@@@@@@@@@@@@@@@                                          
           @@@@@@@@@@@@@@@@@@@@@@@@                                        
           @@@@@@@@@@@@@@@@@@@@@@@@@@                                      
           @@@@@@@@@@@@@@@@@@@@@@@@@@@@                                    
            @@@@@@@@@@@@@@@@@@@@@@@@@@@@                                  
            @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                                
            @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                              
             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                            
             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                          
             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                        
              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                        
              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                      
              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                    
               @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  
               @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                
               @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@              
                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                
                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                
                @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  
                 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                  
                 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                    
                 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                    
                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                      
                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                        
                  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                        
                   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                          
                   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@                          
                   @@@@@@@@@@@@@@@@@@@@@@@@@@@@                            
                    @@@@@@@@@@@@@@@@@@@@@@@@@                              
                    @@@@@@@@@@@@@@@@@@@@@@@@                              
                    @@@@@@@@@@@@@@@@@@@@@@@                                
                     @@@@@@@@@@@@@@@@@@@@@                                
                     @@@@@@@@@@@@@@@@@@@@                                  
                     @@@@@@@@@@@@@@@@@@@                                  
                      @@@@@@@@@@@@@@@@                                    
                      @@@@@@@@@@@@@@@                                      
                      @@@@@@@@@@@@@@                                      
                       @@@@@@@@@@@@                                        
                       @@@@@@@@@@@                                        
                       @@@@@@@@@@                                          
                        @@@@@@@                                            
                        @@@@@@                                            
                        @@@@@                                              
                         @@@                                              
                         @@                                                
                         @                                                
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
                                                                          
 

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyLun 5 Oct 2015 - 12:51

Ouai, ajoutes l'antialiasing :p

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass

Messages : 3338
Localisation : Dans une canonnière wookie.
Projet Actuel : Living the life
CBNA Rebirth Days - Page 13 Void

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyLun 5 Oct 2015 - 13:25

C'est les gens sous linux qui vont être contents !

_________________
Wyvup
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
Uubu
Bavard
Uubu

Messages : 102

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 17:29

CBNA Rebirth Days - Page 13 Tumblr_nvv12gjJMd1tha4dbo1_r1_500

_________________

CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo1_100
CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo2_100
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****
hyper

Messages : 1434

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 17:30

C'est pour Dope TrashCanners j'imagine ? Surprised

_________________
côt.
Revenir en haut Aller en bas
Uubu
Bavard
Uubu

Messages : 102

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 17:31

Ouaip' :'D

_________________

CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo1_100
CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo2_100
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****
hyper

Messages : 1434

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 17:32

Très sympa en tout cas thumleft

_________________
côt.
Revenir en haut Aller en bas
Uubu
Bavard
Uubu

Messages : 102

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 17:45

hyper a écrit:
Très sympa en tout cas thumleft

Merci Yum!

_________________

CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo1_100
CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo2_100
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 18:10

Pas mal du tout ces petites anims :p
J'aime beaucoup les spéculaires du tonneau, ça donne bien du volume.

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
Linky439

Messages : 2634
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 18:21

Joli, en effet Smile

_________________
Cliquez pour accéder aux topics dédiés !
CBNA Rebirth Days - Page 13 I4AWwEs    CBNA Rebirth Days - Page 13 CaVn0FN
Revenir en haut Aller en bas
Invité
Invité



CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 7 Oct 2015 - 18:57

tà_t à cçàp je veux rejouer a doom
Revenir en haut Aller en bas
Uubu
Bavard
Uubu

Messages : 102

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 8 Oct 2015 - 7:27

Merci les gars. :'D

_________________

CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo1_100
CBNA Rebirth Days - Page 13 Tumblr_nnxidiD3GZ1tha4dbo2_100
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 8 Oct 2015 - 8:37

Classe d'automate cellulaire facile à utiliser, exemple de moteur de liquide s'écoulant à l'infini très simpliste :
Code:
#include <iostream>
#include <queue>
#include <vector>

typedef std::vector<std::vector<char>> char2D;

struct pos2D
{
    int x, y;
};

struct queuedAction
{
    pos2D pos;
    char assignedValue;
};

class cellularAutomata
{
public:
    cellularAutomata(const unsigned wid, const unsigned hei)
    {
        vec.resize(wid);
        for (auto& i : vec)
        {
            i.resize(hei);
        }
    }
    
    void update()
    {
        for (unsigned i = 0; i < vec.size(); ++i)
        {
            for (unsigned j = 0; j < vec[i].size(); ++j)
            {
                this->updateCell({(int)i, (int)j});
            }
        }
        
        flushQueues();
    }
    
    virtual void updateCell(pos2D pos) = 0;
    
    void flushQueues()
    {
        while (!actqueue.empty())
        {
            queuedAction actiondata = actqueue.front();
            actqueue.pop();
            
            if (actiondata.pos.x >= 0          &&
                actiondata.pos.x <= vec.size() &&
                actiondata.pos.y >= 0          &&
                actiondata.pos.y <= vec[0].size())
            {
                vec[actiondata.pos.x][actiondata.pos.y] = actiondata.assignedValue;
            }
        }
    }
    
    std::vector<char>& operator[](int index)
    {
        return vec[index];
    }
    
    void renderConsole()
    {
        for (unsigned x = 0; x < vec.size(); ++x)
        {
            for (unsigned y = 0; y < vec.size(); ++y)
            {
                // Somehow indexes are mixed up, need to invert x and y.
                // @TODO : Fix this to use C++11 range-based loops.
                std::cout << ((vec[y][x] == 0) ? ' ' : char(vec[y][x] + 48));
            }
            std::cout << std::endl;
        }
    }
    
protected:
    std::queue<queuedAction> actqueue;
    char2D vec;
};

class liquidAutomata : public virtual cellularAutomata
{
public:
    liquidAutomata(const unsigned wid, const unsigned hei) : cellularAutomata(wid, hei) {}
    
    std::vector<pos2D> getDiffuseSpots(pos2D pos)
    {
        std::vector<pos2D> diffuseSpots;
        
        if (vec[pos.x][pos.y + 1] != SOLID)
        {
            diffuseSpots.push_back({pos.x, pos.y + 1});
        }
        else
        {
            if (vec[pos.x + 1][pos.y] != SOLID)
                diffuseSpots.push_back({pos.x + 1, pos.y});
            
            if (vec[pos.x - 1][pos.y] != SOLID)
                diffuseSpots.push_back({pos.x - 1, pos.y});
        }
        
        return diffuseSpots;
    }
    
    void updateCell(pos2D pos)
    {
        if (vec[pos.x][pos.y] == LIQUID)
        {
            std::vector<pos2D> diffuseSpots = getDiffuseSpots(pos);
            
            for (auto& i : diffuseSpots)
            {
               actqueue.push({{i.x, i.y}, LIQUID});
            }
        }
    }
    
    enum celltypes
    {
        NONE = 0,
        LIQUID = 1,
        SOLID = 2
    };
};

int main()
{
    liquidAutomata ca(10, 10);
    
    for (unsigned i=2; i<8; ++i)
        ca[i][6] = liquidAutomata::SOLID;
        
    ca[6][6] = liquidAutomata::NONE;
        
    ca[2][2] = liquidAutomata::LIQUID;
    
    for (unsigned long tick = 0; tick < 15; ++tick)
    {
        std::cout << std::endl << "Current iteration : " << tick << std::endl;
        
        ca.update();
        ca.renderConsole();
    }
    
    return EXIT_SUCCESS;
}

Exemple de rendu :
Code:
Current iteration : 0
         
         
  1     
  1     
         
         
  2222 2 
         
         
         

Current iteration : 1
         
         
  1     
  1     
  1     
         
  2222 2 
         
         
         

Current iteration : 2
         
         
  1     
  1     
  1     
  1     
  2222 2 
         
         
         

Current iteration : 3
         
         
  1     
  1     
  1     
 111     
  2222 2 
         
         
         

Current iteration : 4
         
         
  1     
  1     
  1     
 1111   
 12222 2 
         
         
         

Current iteration : 5
         
         
  1     
  1     
  1     
 11111   
 12222 2 
 1       
         
         

Current iteration : 6
         
         
  1     
  1     
  1     
 111111 
 12222 2 
 1       
 1       
         

Current iteration : 7
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1       
 1       
 1       

Current iteration : 8
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1    1 
 1       
 1       

Current iteration : 9
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1    1 
 1    1 
 1       

Current iteration : 10
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1    1 
 1    1 
 1    1 

Current iteration : 11
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1    1 
 1    1 
 1    1 

Current iteration : 12
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1    1 
 1    1 
 1    1 

Current iteration : 13
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1    1 
 1    1 
 1    1 

Current iteration : 14
         
         
  1     
  1     
  1     
 111111 
 1222212 
 1    1 
 1    1 
 1    1 

Y'a quoi à améliorer côté code? \o

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 8 Oct 2015 - 8:39

Déjà utiliser un vector de vector c'est une très mauvaise idée côté optimisation de la mémoire cache.

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 8 Oct 2015 - 8:40

onilink_ a écrit:
Déjà utiliser un vector de vector c'est une très mauvaise idée côté optimisation de la mémoire cache.
Il faut utiliser quoi du coup? Un tableau statique m'aurait pas mal restreint

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 8 Oct 2015 - 8:42

Un vector tout court, et faire les accès avec le fameux [x + y*wid].

Faut bien comprendre qu'un vector contiens un bout de mémoire continue, par contre un vector de vector contiens N bouts de mémoire, donc c'est discontinu et c'est très mauvais pour le cache.

Le plus simple ça reste de se faire une petite classe template style Array2d avec deux paramètres templates:
-le premier: le type que doit contenir la classe
-le deuxieme: si la mémoire doit être continue ou segmentée

Ça te fera bosser sur les templates comme ça (qui sont tout l’intérêt du C++).

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 8 Oct 2015 - 8:45

Tu auras besoin de la specialization de templates d'ailleurs:
http://www.cprogramming.com/tutorial/template_specialization.html

Et pour pousser encore un peu le truc (et ton entrainement), gère toi même la mémoire (donc pas de vector) et garde le pointeur alloué dans un unique_ptr.

Good luck :b

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 8 Oct 2015 - 8:48

Huhu, je sens que je vais m'amuser x)
Je vais tester ça ce soir ou demain

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyLun 12 Oct 2015 - 13:26

Vu que le masochisme c'est cool, j'ai fait une petite algo de game of life sur... algobox.

Code:
GOL  -  12.10.2015

******************************************

******************************************

1  VARIABLES
2    i EST_DU_TYPE NOMBRE
3    X EST_DU_TYPE NOMBRE
4    Y EST_DU_TYPE NOMBRE
5    neighbor EST_DU_TYPE NOMBRE
6    size EST_DU_TYPE NOMBRE
7    gol EST_DU_TYPE LISTE
8    push EST_DU_TYPE LISTE
9    pushsz EST_DU_TYPE NOMBRE
10    pop EST_DU_TYPE LISTE
11    popsz EST_DU_TYPE NOMBRE
12    j EST_DU_TYPE NOMBRE
13    it EST_DU_TYPE NOMBRE
14  DEBUT_ALGORITHME
15    LIRE it
16    LIRE size
17    POUR i ALLANT_DE 0 A size*size
18      DEBUT_POUR
19      gol[i] PREND_LA_VALEUR round(random())
20      FIN_POUR
21    POUR i ALLANT_DE 0 A it
22      DEBUT_POUR
23      POUR X ALLANT_DE 1 A (size-2)
24        DEBUT_POUR
25        POUR Y ALLANT_DE 1 A (size-2)
26          DEBUT_POUR
27          SI (gol[X + (Y*size)]) ALORS
28            DEBUT_SI
29            AFFICHER "O"
30            FIN_SI
31            SINON
32              DEBUT_SINON
33              AFFICHER " "
34              FIN_SINON
35          neighbor PREND_LA_VALEUR gol[(X-1) + ((Y-1)*size)] + gol[(X-1) + (Y*size)] + gol[(X-1) + ((Y+1)*size)] + gol[X + ((Y-1)*size)] + gol[X + ((Y+1)*size)] + gol[(X+1) + ((Y-1) * size)] + gol[(X+1) + (Y*size)] + gol[(X+1) + ((Y+1)*size)]
36          SI (gol[X + (Y*size)] != 1) ALORS
37            DEBUT_SI
38            SI (neighbor == 3) ALORS
39              DEBUT_SI
40              push[pushsz] PREND_LA_VALEUR X + (Y*size)
41              pushsz PREND_LA_VALEUR pushsz + 1
42              FIN_SI
43            FIN_SI
44            SINON
45              DEBUT_SINON
46              SI ((neighbor != 2) ET (neighbor != 3)) ALORS
47                DEBUT_SI
48                pop[popsz] PREND_LA_VALEUR X + (Y*size)
49                popsz PREND_LA_VALEUR popsz + 1
50                FIN_SI
51              FIN_SINON
52          FIN_POUR
53        AFFICHER " "
54        FIN_POUR
55      //Flush the push list
56      POUR j ALLANT_DE 0 A pushsz
57        DEBUT_POUR
58        gol[push[j]] PREND_LA_VALEUR 1
59        FIN_POUR
60      pushsz PREND_LA_VALEUR 0
61      //Flush the pop list
62      POUR j ALLANT_DE 0 A popsz
63        DEBUT_POUR
64        gol[pop[j]] PREND_LA_VALEUR 0
65        FIN_POUR
66      popsz PREND_LA_VALEUR 0
67      AFFICHER "Itération "
68      AFFICHER i
69      FIN_POUR
70  FIN_ALGORITHME

Petite compilation de raisons pourquoi je haïs algobox actuellement :
  • La gestion des erreurs est complétement pourrie, les trois quart des erreurs se limiteront à afficher "Erreur de calcul" lorsqu'on dépasse la taille d'un tableau...
  • Le débogage est pas pratique
  • Si on enregistre une algo, même en mode texte, qu'on l'enregistre et qu'on la recharge, le code va redevenir une algorithme utilisant l'interface pas pratique d'algobox à la souris et on ne peut plus retourner en mode texte sans quoi on doit recoder l'algorithme de zéro
  • La sortie de l'algorithme vers du texte est stupide, pourquoi liste-il les lignes?
  • Impossible de faire des tableaux, on doit utiliser des listes normales et multiplier le deuxième index pour parvenir à ce qu'on veut faire, voir mon algo ci-dessus
  • x EST_DU_TYPE NOMBRE? Sérieux?
  • x PREND_LA_VALEUR 5? Sérieux?
  • Le listage de variables n'est pas du tout naturel
  • Faire sa propre fonction qui ne se résume pas à être un seul calcul est impossible
  • Très lent, surtout la sortie du texte vers la console.
  • J'en laisse passer pas mal d'autres...

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_

Messages : 9108
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyLun 12 Oct 2015 - 14:50

J'ai un peu la même réaction allergique quand je vois du GML Razz

_________________
CBNA Rebirth Days - Page 13 Runningpotato1CBNA Rebirth Days - Page 13 TvF6GED CBNA Rebirth Days - Page 13 MdetltS
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****
hyper

Messages : 1434

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 14 Oct 2015 - 18:17

onilink_ a écrit:
J'ai un peu la même réaction allergique quand je vois du GML Razz
Arrête de faire ton anti-GM Razz, j'utilise que ça pour l'instant (régulièrement en tout cas), on peut faire des bons petits jeux avec. La preuve : le concours #06 a pour gagnant... ok je me tais zip

Pour répondre à Asu, oui, Algobox c'est très... orienté débutant en programmation Yum!

_________________
côt.
Revenir en haut Aller en bas
Térence
Utilisateur confirmé: Rang *****
Térence

Messages : 2213
Localisation : Oui

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 14 Oct 2015 - 18:29

JE SUIS PAS D'ACCORD, LE JAVA C'EST TRES BIEN !


Ah pardon, on dénigrait un langage, j'ai crû que c'était java.

_________________
Je suis partie sur les ailes du vent et la tempête m'a ramenée.
Revenir en haut Aller en bas
hyper
Utilisateur confirmé: Rang ****
hyper

Messages : 1434

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyMer 14 Oct 2015 - 18:30

Térence a écrit:
JE SUIS PAS D'ACCORD, LE JAVA C'EST TRES BIEN !

Tu t'es trompé de topic ^^

_________________
côt.
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu

Messages : 895

CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 EmptyJeu 15 Oct 2015 - 8:50

Petite classe d'array à deux dimensions, avec quelques méthodes, que je compléterai plus tard :
Code:
#include <iostream>
#include <stdexcept>
#include <ctime>

struct vec2D
{
    float x, y;
};

template <typename T, size_t sz>
class arrayRow
{
public:
    arrayRow(T* vdata) : vec_data(vdata) {}

    T& operator[](const unsigned i)
    {
        if (i >= sz)
            throw std::out_of_range("arrayRow (from array2D)");
           
        return (vec_data[i]);
    }
   
    unsigned size() const { return sz; }

private:
    T* vec_data;
};

template <typename T, size_t sz>
class array2D
{
public:
    array2D()
    {
        vec_data = new T[realsz];
    }
   
    arrayRow<T, sz> operator[](const unsigned i)
    {
        if (i >= sz)
            throw std::out_of_range("array2D");
           
        return arrayRow<T, sz>(&vec_data[i * sz]);
    }
   
    unsigned size() const { return sz; }
   
private:
    T* vec_data;
    const int realsz = sz*sz;
};

int main()
{
    srand(time(NULL));
    array2D<char, 15> array;
   
    for (unsigned i = 0; i < array.size(); ++i)
    {
        for (unsigned j = 0; j < array[i].size(); ++j)
        {
            array[i][j] = '0' + (rand() % 9);
        }
    }

    for (unsigned i = 0; i < array.size(); ++i)
    {
        for (unsigned j = 0; j < array[i].size(); ++j)
        {
            std::cout << array[i][j];
        }
        std::cout << std::endl;
    }
}

Si le code est pas trop dégueu, je pense l'utiliser dans mon champ vectoriel

_________________
‎<‎Cysteine‎>‎ nON mais la touche maj s'active/se désactive toute seule
‎<‎Cysteine‎>‎ et a du mal à réponDRE QUANd j'appuie dessus
‎<‎Cysteine‎>‎ et je l'ai démont2? IL Ny a rien DEDANs
Revenir en haut Aller en bas
Contenu sponsorisé




CBNA Rebirth Days - Page 13 Empty
MessageSujet: Re: CBNA Rebirth Days   CBNA Rebirth Days - Page 13 Empty

Revenir en haut Aller en bas
 
CBNA Rebirth Days
Revenir en haut 
Page 13 sur 22Aller à la page : Précédent  1 ... 8 ... 12, 13, 14 ... 17 ... 22  Suivant
 Sujets similaires
-
» Navy Days 2008: enfin LA vérité
» Grossir des fesses naturelement
» navy days 2016 à zeebrugges

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Informations :: Projets communs-
Sauter vers: