Bonjours à tous,
J'essaie de tracer la fonction sin(x) mais à l'aide des séries entières. Mais je ne sais pas pourquoi je n'arrive pas à afficher les valeurs correctes :'(
J'aimerais donc si c'est pas trop demandé avoir un peu d'aide pour débloquer la situation ;D
Je voudrais juste une aide pour la série entière usuelle le reste je peux me débrouiller tout seul je pense ;D
Voici mon code :
//Le main
#include <iostream>
#include <SFML/Graphics.hpp>
#include "Trace.hpp"
#include "Repere.hpp"
#include "constante.hpp"
using namespace sf;
using namespace std;
int main()
{
RenderWindow window(VideoMode(1200,800), "play", Style::None);
window.setFramerateLimit(60);
bool unique(true);
Trace trace(2);
Repere repere("ressources/repere.png");
int i(0);
while(window.isOpen())
{
Event event;
while(window.pollEvent(event))
{
if((event.type == Event::KeyReleased) && (event.key.code == sf::Keyboard::Escape))
{
window.close();
}
if(unique)
{
for(i = 0; i< 5 ; ++i)
{
window.draw(trace.Place(i));
}
unique = false;
}
}
window.display();
}
return EXIT_SUCCESS;
}
//Class Trace
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <vector>
#include <cmath>
#include "Trace.hpp"
#include "constante.hpp"
using namespace sf;
using namespace std;
Trace::Trace(int n): m_n(n)
{
}
RectangleShape Trace::Place(int positionX) //ICI le beug
{
m_points = 0;
for(int i(0); i < m_n ; ++i)
{
m_local = 2*i+1;
m_variable = pow(-1,i)*pow(positionX,m_local);
m_valeurs = Factoriel(m_local);
m_points = m_variable/m_valeurs + m_points;
cout << m_variable << endl << m_valeurs << endl << m_points << endl;
cout << "--------------" << positionX << endl;
}
m_ordonnee.setSize(sf::Vector2f(10, 10));
m_ordonnee.setOutlineColor(sf::Color::White);
m_ordonnee.setPosition(positionX+100,800-m_points);
return m_ordonnee;
}
int Trace::Factoriel(int n)
{
int m(1);
for(int i(1); i <= n; ++i)
{
m = m*i ;
}
return m;
}
#ifndef TRACE_HPP_INCLUDED
#define TRACE_HPP_INCLUDED
#include <iostream>
#include <SFML/Graphics.hpp>
#include "constante.hpp"
class Trace
{
public:
Trace(int n);
sf::RectangleShape Place(int positionX);
int Factoriel(int n);
int valeur();
private:
unsigned int m_local;
long long m_points;
long long m_valeurs;
long long m_variable;
sf::RectangleShape m_ordonnee;
int m_n;
};
#endif // TRACE_HPP_INCLUDED
Merci d'avance :-*
Hello
y'a plein d'erreurs dans ton code, déjà pourquoi tu calcules tout avec des entiers? vu que le sinus est entre -1 et 1 ça pourra jamais marcher.... pareil pour la position X tu files que des entiers donc forcemment vu que la période est de 6 et quelques, tu va rien voir.
J'ai fait une correc rapide qui marche à peu près, mais de toute façon très rapidement la série entière converge pas super bien...
//Le main
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <vector>
#include <cmath>
using namespace sf;
using namespace std;
class Trace
{
public:
Trace(int n);
sf::RectangleShape Place(double positionX);
int Factoriel(int n);
int valeur();
private:
unsigned int m_local;
double m_points;
long long m_valeurs;
double m_variable;
sf::RectangleShape m_ordonnee;
int m_n;
};
Trace::Trace(int n): m_n(n)
{
}
RectangleShape Trace::Place(double positionX) //ICI le beug
{
m_points = 0;
for(int i(0); i < m_n ; ++i)
{
m_local = 2*i+1;
m_variable = pow((int)-1,(double)i)*pow((double)positionX,(double)m_local);
m_valeurs = Factoriel(m_local);
m_points = m_variable/m_valeurs + m_points;
}
cout << m_points << " vs " << sin(positionX) << '\n';
m_ordonnee.setSize(sf::Vector2f(10, 10));
m_ordonnee.setOutlineColor(sf::Color::White);
//m_ordonnee.setFillColor(sf::Color::Red);
m_ordonnee.setPosition(positionX*100+100, m_points*400 + 100);
//m_ordonnee.setPosition(10,10);
return m_ordonnee;
}
int Trace::Factoriel(int n)
{
int m(1);
for(int i(1); i <= n; ++i)
{
m = m*i ;
}
return m;
}
using namespace sf;
using namespace std;
int main()
{
RenderWindow window(VideoMode(800,600), "play", Style::Titlebar);
window.setFramerateLimit(10);
bool unique(true);
Trace trace(10);
//Repere repere("ressources/repere.png");
int i(0);
while(window.isOpen())
{
Event event;
window.clear();
while(window.pollEvent(event))
{
if((event.type == Event::KeyReleased) && (event.key.code == sf::Keyboard::Escape))
{
window.close();
}
}
for(i = 0; i< 100 ; ++i)
{
window.draw(trace.Place(i/10.0));
}
window.display();
}
return EXIT_SUCCESS;
}
Re bonjours,
J'ai essayer de modifier mais à partir d'une certaine valeur m_n la valeur de F(positionX) = nan.
de plus je ne sais pas pourquoi mais la fenêtre clignote alors que grâce à la valeur unique les points ne devrait pas clignoter :'(
Voici le code ( au niveau du main ) :
#include <iostream>
#include <SFML/Graphics.hpp>
#include "Trace.hpp"
#include "Repere.hpp"
#include "constante.hpp"
using namespace sf;
using namespace std;
int main()
{
RenderWindow window(VideoMode(800,600), "play", Style::Titlebar);
window.setFramerateLimit(10);
bool unique(true);
Trace trace(10);
Repere repere("ressources/repere.png");
int i(0);
while(window.isOpen())
{
Event event;
while(window.pollEvent(event))
{
if((event.type == Event::KeyReleased) && (event.key.code == sf::Keyboard::Escape))
{
window.close();
}
if ((event.type == Event::KeyReleased) && (event.key.code == sf::Keyboard::F1))
{
Image screen = window.capture();
screen.saveToFile("screenshot.bmp");
}
if(unique)
{
window.clear(Color::White);
for(i = 0; i< 100 ; ++i)
{
window.draw(trace.Place(i/10));
}
unique = false;
}
}
window.display();
}
return EXIT_SUCCESS;
}
Merci