IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Dérivées et primitives


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut Dérivées et primitives
    Bonjour tout le monde,
    Je voudrais réaliser une primitive d'une expression non connu à l'avance.
    Faire comme en mathématiques mais avec des lignes de codes, j'ai chercher sur le net, et je n'ai rien trouvé du tout sur ce sujet, pourtant j'en ai énormément besoin pour mon projet de fin d'année.

    Si vous savez où chercher ou m'expliquer ce serait cool

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Dérivées et primitives
    Citation Envoyé par franco01
    Bonjour tout le monde,
    Je voudrais réaliser une primitive d'une expression non connu à l'avance.
    Faire comme en mathématiques mais avec des lignes de codes, j'ai chercher sur le net, et je n'ai rien trouvé du tout sur ce sujet, pourtant j'en ai énormément besoin pour mon projet de fin d'année.
    Il faut parser l'expression (la séparer en 'tokens'), puis analyser l'expression mathématique selon les standards des maths... Pas grand chose à voir avec le langage C.

    -> Forum Algorithmes ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut
    Il faut parser l'expression (la séparer en 'tokens'), puis analyser l'expression mathématique selon les standards des maths... Pas grand chose à voir avec le langage C.

    -> Forum Algorithmes ?
    Je ne vois pas ce que c'est que les tokens, tu pourrais me résumer rapidement.
    Tu penses que c'est plus un problème d'algo que du code?

  4. #4
    Membre émérite
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Par défaut
    Salut,

    Si tu es sous linux, il y a les utilitaires lex et yacc qui sont là pour ça (pas forcement evidents à prendre en main, mais après, ça roule tout seul ):
    http://www.linux-france.org/article/devl/lexyacc/minimanlexyacc.html
    Très utiles pour faire des compilateurs, etc.... Donc tout à fait adapté pour ton problème

    ++
    Pouic
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut
    En effet ca à l'air intéressant mais je ne sais pas si ca m'aiderais car je dois réaliser les primitives et intégrales directement dans un programme utilisant openGl et glut, et pour le moment je suis sur windows.
    J'essaie d'intégrer un système physique dans un petit jeu, donc j'ai des forces etc .. , et avec ces équations il faut qu'à des moments je fasse des intégrales de fonctions etc.. mais il faut que ca se gère tout seul puisque je ne pourrais plus les manipuler durant le programme.

    Donc je sais pas si c'est cet outil qu'il me faudrait mais je jette quand même un oeil :-)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 36
    Par défaut
    si tu dois calculer des intégrales et des dérivées pour le moteur physique d'un jeu, c'est qu'il y a surement plus simple (et à mon avis le parser est loin d'être adapté pour cette utilisation).

    Essaie peut etre d'implanter un moteur physique qui "ressemble" à celui que tu souhaites obtenir, en évitant les opérations mathématiques gourmandes, et en ommettant les paramètres insignifiants...

    Seb

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    Généralement, un moteur physique n'est pas confronté à l'intégration de fonctions compliquées qui sortent du néant ! Ces formules elles sortent de quelque part. Alors on peut imaginer qu'un module externe permette de définir des trajectoires pour des objets via des formules mathématiques. En réalité, il vaudra mieux définir une série de trajectoires possibles, et résoudre les équations à la main pour chacune.

    Sinon, les intégrales sont calculables numériquement, sans procéder forcément à une analyse : La méthode des rectangles, des milieux des trapèzes, simson, ou la multitude d'approximation d'intégrales que tu veu est à ta disposition !

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par défaut
    J'ai deja vu un systeme de differenciation automatique en FORTRAN...
    A partir dui code de la fonction il code la dérivée... automatique, mais statique.

    Maple ou mathématica font cela.

    Maintenent la veriatble question est de savoir si une dérivée analytique est interessante ? En pratique, pour des fonction un tant soit peu compliquée une dérivée numérique est plus vite calculée...

    Pour l'integration, la forme analytique n'existe pas toujours, alors ou il vaut mieux revenir à une integration numérique (ma methode préferée : la quadrature de Legendre)...

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Par défaut
    Ouuula... pour un jeu.. calculer les integrales c'est calculer à partir de l'acceleration d'un point, sa vitesse, puis sa position. Tout cela peut etre fait tres facielement avec des approximations et des additions en temps reele , pour peu qu'on definisse le pas 'temporel'.

    un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    ax = 5;
    ay = 2;
    x = 10;
    y = 10;
    vx = vy = 0 ;
     
    while(1) {
       vx += ax;
       vy += ay;
       x+= vx;
       y+= vy;
     
      AfficherPoint(x, y);
    }

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 54
    Par défaut
    En effet, mtopoloff, J'utilise actuellement des choses comme ce que tu montres (sauf que c'est plus simple puisque je faisais que de la 2D), mais comme tu l'as dis si bien, il faut au moins obtenir l'accélération en intégrant une fois la somme des forces.

    Je crois bien que la méthode la plus adéquate est le calcul de l'intégrale numériquement, mais il faut que je le code en C , donc faudrait pas que ce soit très complexe

    Je continue de me documenter

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 150
    Par défaut
    Ben l'exemple que j'ai donnée c'est pour de la 2d.... donc.... bon bref.

    C'est pas du tout compliqué, il faut juste faire attention au pas de l'iteration.

    Il faut adapter l'evolution de tes integrales en fonction du temps de tracage ecran (environ 25ms par pas).

    VOila. Sinon c'est pas dutout compliqué, meme en C.

  12. #12
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 17
    Par défaut
    si c'est pour un jeu, pas besoin de ça !!

    tu precalcules a la main, ou avec Maple, en formel, puis ensuite, tu utilises les résultats dans ton prog.

    Exemple :
    tu as un frottement quadratique p, tu as le champ de pesanteur g, tu as la force de poussée de ton vaisseau P par exemple :

    a tout moment tu connais v0 et x0 : ce que tu veux, toi, c'est y recalculer.
    Tu te moques de la valeur de a (accélération)

    tu sais que Sigma(F) = ma
    donc :

    P + p*v0² + mg = ma

    <=> (a la main)

    P/m + p*v0²/m + g = a

    integre a la main :

    v = (P/m+p*v0²/m+g)*t + v0
    x (vecteur x) = (P/m+p*v0²/m+g)*t²/2 + v0*t + x0

    le t est en fait le delta t depuis la derniere frame qui se calcule
    tu poses a la fin :

    x0 = x
    v0 = v

    comme ça tu repars a t =0 dans le nouveau repere, pour avoir de nouveau t = delta t

    et tu calcules ton x et ton v en leur donnant direct les equation précalculées ci dessus : tu n'as qu'a dire ce que valent P, p, m et g

    tu n'as rien a intégrer, c'est immédiat, et ça marche

    Note : dans bcp de jeux vidéos, on raisonne comme ça : on précalcule tout ce qu'on peut

Discussions similaires

  1. [Débutant] Primitive dérivée C#
    Par remirobert dans le forum C#
    Réponses: 3
    Dernier message: 21/08/2012, 09h10
  2. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 17h36
  3. Lettre Drive lecteur de CDRom
    Par titicurio dans le forum C++Builder
    Réponses: 4
    Dernier message: 18/09/2003, 13h44
  4. Primitives : "bavures"
    Par delire8 dans le forum DirectX
    Réponses: 22
    Dernier message: 05/07/2003, 23h00
  5. Primitive du noyau
    Par freud dans le forum Programmation d'OS
    Réponses: 5
    Dernier message: 25/11/2002, 03h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo