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 :
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
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;
}
#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