Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tracé de Courbes et Fonctions sous C++

    23 novembre 2022 à 14:40:44

    Bonjour,

    Je suis la formation en ligne à C++, avec beaucoup de plaisir.

    Physicien retraité, je souhaite faire des simulations de problèmes de Physique et les illustrer par des courbes 2D et des surfaces 3D, pour les rendre ludiques et intéresser de jeunes elèves.

    Après des recherches décevantes sur le net, je suis enfin tombé sur une solution élégante qui remplace avantageusement les logiciels professionnels ( Type Igor Pro) que j'avais l'habitude d'utiliser, mais dont les tarifs sont incompatibles avec le but poursuivi .

    J'ai, bien entendu utilisé le bel utilitaire GRAPHER fourni avec les macs. J'ai ensuite recherché une solution gratuie multi-plateforme.

    J'ai finalement installé sur mon mac, le logiciel libre gnuplot qui se commande par lignes de code sur la console. C'est remarquable, même si c'est plus complexe que Grapher

    mode d'emploi : http://www.gnuplot.info/docs_5.4/Gnuplot_5_4.pdf

    J'ai ensuite trouvé ( après bien des recherches) une solution pour générer les lignes de commande de  Gnuplot dans programme en C++ écrit sous X code.

    Pour démarrer, voir le lien suivant.

    https://github.com/martinruenz/gnuplot-cpp

    Par rapport au code proposée,  il faut cependant  penser à  indiquer le chemin vers gnuplot, qui change selon le mode d'installation de GnuPlot ( HomeBrew ou MacPorts. Voir les explications sur:

    https://stackoverflow.com/questions/12849711/sh-gnuplot-command-not-found-in-xcode

    sur le console ( pour Gnuplot installé avec PacPorts) :

    XXXXXXXXXXXXXX@iMac-de-jean-michel ~ % whereis gnuplot
    gnuplot: /opt/local/bin/gnuplot

    Cela fonctionne très bien pour tracer des nuages de points stockés dans un fichier, pour tracer des fonctions et même pour "fitter" des données à une courbe ... et bien d'autres choses semble t'il.

    Mes futurs logiciels C++ auront un traceur performant ( remarque cela doit aussi fonctionner avec d'autres langages).

    Pour terminer par une question : Quelqu'un aurait-il essayé quelque chose de semblable avec GRAPHER du mac ?

    Jean-Michel

    • Partager sur Facebook
    • Partager sur Twitter
      23 novembre 2022 à 17:25:04

      Bonsoir,


      C++ n'est pas vraiment l'environnement le plus convivial pour tracer des courbes.

      La preuve, une des approches les plus simples consiste à passer par des outils externes comme gnuplot et même là... dans le passé je générais des fichiers de données certes en C++, mais le séquencement entre les 2 c'était à la main ou avec bash.

      Honnêtement des outils comme scilab seront bien plus adaptés. Voire carrément python dont la prise en main peut être simplifiée avec jupyter. Il existe même des serveurs jupyter gratuits et en ligne où faire tourner nos démo/cours/TP. Sur le plan convivialité, pédagogie et prise en main, je pense que c'est probablement ce que l'on trouvera de mieux aujourd'hui.

      Le C++? Plutot pour les calculs lourds, pas vraiment pour initier des jeunes aux maths.

      -
      Edité par lmghs 23 novembre 2022 à 17:44:26

      • Partager sur Facebook
      • Partager sur Twitter
      C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
        23 novembre 2022 à 22:32:05

        Bonjour,

        Il y a Maple qui est bien et programmable aussi.

        Après, je crois que c'est payant. Mais il existe un projet WxMaxima gratuit lui, qui essaie de refaire ce que fait Maple.

        http://wxmaxima-developers.github.io/wxmaxima/screenshots.html

        • Partager sur Facebook
        • Partager sur Twitter

        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

          24 novembre 2022 à 9:26:51

          Merci à lmghs et à Fvirtman pour leurs réponses,

          Les arguments de lmghs sont parfaitement sensés en particulier en ce qui concerne les capacités graphiques de C++.

          Ce choix de C++ est motivé

          1)  par la possibilité ( il n'est pas le seul, bien sur) de le compiler en applications autonomes au sein d'un IDE multi-plateformes  tels de Xcode sur le Mac ou Visual Studio sur PC.

          2) par le caractère très généraliste du langage qui reprend tous les avantages du C (écriture assez simple de programmes scientifiques et efficacité en raitement des images)

          2) D'un point de vue programmation , il donne accès à la programmation structurée  et à la programmation orientée objets qui me semblent pédagogiquement importantes.

          Je suis bien d'

          Oups ...

          Fichier parti un peu tot...

          Je suis bien d'accord sur les faiblesses au niveau graphique, mais il me semble que la compilation en applications devrait permettre de resoudre cela.

          La solution que j'ai proposé permet cependant d'obtenir immédiatement , sous n'importe quel format ( png, jpg, pdf, ...) les résultats graphiques de qualité permettant d'illustrer des documents.

          Elle ne  convient probablement pas

          1) pour réaliser une application autonome avec une sortie graphique de qualité.

          -
          Edité par Jean-MichelJonathan 24 novembre 2022 à 9:37:00

          • Partager sur Facebook
          • Partager sur Twitter
            24 novembre 2022 à 10:37:29

            > 2) D'un point de vue programmation , [C++] donne accès à la programmation structurée  et à la programmation orientée objets qui me semblent pédagogiquement importantes.

            La programmation structurée est un acquis dans les langages de programmation depuis les années 80 (ça remonte à 15-20 ans plus tôt, mais ça a mis un certain temps a percoler dans l'industrie => fortran 77 rev 78, cobol 85)

            La grande majorité des langages modernes permettent la programmation par objets (C ne fait pas partie des langages modernes).

            Enfin du point de vue pédagogique, C++ est bien compliqué pour ce que les débutants veulent faire.

            PS: un fichier d'entête comme gnuplot.h n'est pas le bon endroit pour définir les méthodes d'une classe.

            -
            Edité par michelbillaud 24 novembre 2022 à 10:42:27

            • Partager sur Facebook
            • Partager sur Twitter
              24 novembre 2022 à 12:28:25

              >pour les rendre ludiques et intéresser de jeunes elèves.

              Faudrait être un peu plus précis, SVP.

              Vos critères sont assez générales et bien d'autres langages et environnements informatiques les respectes.

              "La" conception objet est toujours un peu différentes entre langages, il n'y a pas une programmation orientée objet mais plusieurs (la conception objet de SmallTalk, de python, d'Objective-C sont assez différentes de celle(s) du C++, et aussi entre elles).

              Des outils comme "R Studio" ou son langage "R" permettent aux scientifiques de faire des POCs, prototypes, programmes jouet et même des solutions logicielles très facilement.

              Je pense que votre choix du C++ est un peu attif.

              Il y a bien des choses spécifiques au C++ qui en font un langage de choix ("compatibilité" avec le C, contrôle fin du code généré possible, performances pilotables,  multi-paradigme (et pas juste POO), etc...), mais cela ne semble pas faire partie de vos critères.

              L'aspect "autonome", c'est loin d'être unique au C++ (et encore plus avec l'avalanche actuelle des trans-compilateurs quasi tout est convertible en langages "de bas niveau"), et l'utilisation de GnuPlot : on n'est plus dans l'application autonome stricto census.

              Avec un peu de travail avec les installateurs et de programmation système ; et l'aspect "autonome" devient très "relatif".

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                24 novembre 2022 à 16:41:58

                Je suis quelque peu dérouté par l'objectif. On partait de "je souhaite faire des simulations de problèmes de Physique et les illustrer par des courbes 2D et des surfaces 3D, pour les rendre ludiques et intéresser de jeunes elèves."

                Et puis il y a "D'un point de vue programmation , il donne accès à la programmation structurée  et à la programmation orientée objets qui me semblent pédagogiquement importantes.".

                Telles que je vois les choses, l'enseignement/la sensibilisation/la vulgarisation des sciences physiques, c'est un axe qui est totalement orthogonal à l'enseignement de la programmation, et encore plus de la POO. Certes certaines simulations seront plus simples avec un langage ayant un minimum de capacité d'expression. Reste que cela me parait très orthogonal à l'enseignement de la physique. Ce n'est pas pour moi le même public. L'OO (et réduire le C++ à l'OO c'est rater beaucoup de choses) sera intéressant éventuellement pour les personnes qui écrivent un logiciel de simulation, mais pas pour ceux qui vont le manipuler et qui voudront des choses plus simples et interactives.

                D'où les logiciels comme scilab. Ils ont AMA déjà tout ce qu'il faut pour illustrer des phénomènes physiques, sortir de jolis courbes, voire animations. (scilab est une sorte de Matlab opensource par l'INRIA et d'autres labos)

                Maintenant, les scientifiques que j'ai pu croiser autour de moi sont plus en migration vers notebook jupyter en Python. C'est tout aussi expressif. Pas besoin d'installer un logiciel en local (de nouveau la tendance du moment; ce qui est un gros avantage mine de rien avec la diversité des machines des publics). De plus Python est le nouveau langage pédagogique du moment qui est majoritairement enseigné à la fac. On coche plus de cases d'abordabilité, de ludicité...

                Des initiative comme https://mybinder.org/ semblent un bon point de départ pour cela. Quelques exemples:
                - https://hub.gke2.mybinder.org/user/jupyterlab-jupyterlab-demo-0w8y76ui/lab/tree/demo/Lorenz.ipynb
                - https://www.youtube.com/watch?v=KcC0W5LP9GM (présentation de binder2) (EDIT: désolé pas la meilleure présentation)
                - EDIT: mieux: https://hub.ovh2.mybinder.org/user/fomightez-3dscatter_plot-binder-gvj5senw/notebooks/index.ipynb

                Et honnêtement, un programme scientifique "naïvement"  écrit en C++ sera moins efficace qu'un programme Python qui repose sur numpy/scipy. Avoir des performances aussi bonnes demande vite des connaissances un peu plus poussées.

                -
                Edité par lmghs 24 novembre 2022 à 17:12:59

                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                  28 novembre 2022 à 10:17:09

                  Bonjour

                  Merci en particulier à lmghs pour ses références.

                  Le notebook Jupiter semble la continuation de ce que j'ai connu avec les noteBook de Mathematica et de Igor.  Cela a les avantages d'un langage interprété , en particulier dans la phase de mise au point.  Le format notebook est aussi idéal pour une collaboration.

                  J'ai aussi téléchargé Scilab qui peut remplacer Mathlabs et me fournir les illustration pour mes notes de cours.

                  Par contre je tiens à conserver l'ensemble de mon travail  personnel en local en y ajoutant éventuellement un espace collaboratif tel que dropbox.

                  Je vais continuer ma formation sur C++ parce que c'est facile pour moi dans la suite du C que j'ai un pratiqué (incontournable dans les entreprises que j'ai connues et en R&D qui font de la simulation poussée) et que cela permet de créer de petites applications. Même si je n'ai pas su les exprimer ( vous avez compris que je ne suis pas informaticien) , je suis effectivement sensible aux  avantages de C++ exprimés par bacelar

                  Il n'est pas impossible que je passe ensuite à Python par curiosité et pour son intérêt pédagogique.

                  Merci pour cette discussion qui me fait avancer.

                  Merci pour cette discussion

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Tracé de Courbes et Fonctions sous C++

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  • Editeur
                  • Markdown