Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: faire une courbe  (Lu 1539 fois)

0 Membres et 1 Invité sur ce sujet

cosmoff

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
    • E-mail
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

« Modifié: Février 12, 2018, 06:59:52 pm par cosmoff »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re: faire une courbe
« Réponse #1 le: Février 12, 2018, 08:09:48 pm »
Utilise ton debugger, fais du pas à pas, inspecte les variables calculées, ... si tu vois tous les points sur l'axe des ordonnées c'est peut-être qu'ils y sont, et s'ils y sont c'est sans doute parce que le calcul les y place.
Laurent Gomila - SFML developer

 

anything