Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - cosmoff

Pages: [1]
1
Graphique / faire une courbe
« le: Février 12, 2018, 06:58:15 pm »
Bonjour à tous.

Je souhaite réaliser un repère et placer dans ce repère des points qui viennent d'un fichier txt. J'y arrive avec 100 points. Mais le probleme et quand je met 1000 points (je change juste la variable Npoints) ca ne marche plus, tous les points sont sur l'axe des ordonnées.

Je vous met mon code :
#include <iostream>
#include <fstream>
#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;

#define Npoints 100

int main(int argc, char const *argv[])
{

        ifstream fichier("points.txt", ios::in);

        int value;  // contient la valeur à afficher sur le graphe
        string c;       // recupere la valeur du caractere sur le fichier pointsIBC.txt
        int nTe = 0;


        sf::RenderWindow window(sf::VideoMode(640, 480), "courbe");

        window.clear(sf::Color(255,255,255));   //clean toute la fenetre
               
        //on dessine le repere
        //axe des X
        sf::RectangleShape lineHorizontale(sf::Vector2f((int)(window.getSize().x * 0.82), 1)); // trace une ligne verticale
        lineHorizontale.setPosition((int)(window.getSize().x/10), (int)(window.getSize().y)-(int)(window.getSize().y/5));
        lineHorizontale.setFillColor(sf::Color(0,0,0));

        //axe des Y
        sf::RectangleShape lineVerticale(sf::Vector2f((int)(window.getSize().y * 0.7), 1)); // trace une ligne verticale
        lineVerticale.setPosition((int)(window.getSize().x/10), (int)(window.getSize().y)-(int)(window.getSize().y/5));
        lineVerticale.rotate(270);
        lineVerticale.setFillColor(sf::Color(0,0,0));

        sf::VertexArray point(sf::Points, Npoints);

        if(fichier){
                while(getline(fichier,c)){      // on lit le mot
                        nTe++;
                        value = std::stoi(c); convertie String en Int

                        point[nTe -1].position = sf::Vector2f((int)(window.getSize().x/10) + nTe*(int)((window.getSize().x * 0.8)/Npoints),
                                ((int)(window.getSize().y)-(int)(window.getSize().y/5)) - (int)(((float)value/4095)*(float)(window.getSize().y *0.7 )));
                        point[nTe -1].color = sf::Color::Blue;
                       
                }      

                window.draw(point);
                window.draw(lineVerticale);
                window.draw(lineHorizontale);

                window.display();
                fichier.close();
        }
    while (window.isOpen())
    {
                sf::Event event;
                while (window.pollEvent(event))
                {
                    if (event.type == sf::Event::Closed)
                        window.close();
                }      
    }
        return 0;
}
 

voila j'espere que vous trouverez mon probleme car je bloque. Ce qui est étonnant c'est que si je met le nombre de points Npoints < 100 tout marche correctement, mais si j'en met plus, ca ne marche plus.

Est il possible que la ligne sf::VertexArray point(sf::Points, Npoints);  pose des problemes quand Npoints devient tres grand ?

Merci d'avance pour votre aide


Pages: [1]
anything