Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Logiciel] ZeGrapher

logiciel de tracé de courbes

    1 mai 2013 à 15:39:31

    Bonjour ! Cela fait assez longtemps que je ne n'ai pas posté l'état d'avancement de la version en cours, donc me voici !
     
     
    Comme je l'ai évoqué plus haut, je suis en train de travailler sur un module de représentation de données, une sorte de Regressi-like pour ceux qui le connaissent, et ça a pas mal avancé depuis:
     
     
    - Un onglet "Données" a été ajouté à la fenêtre "Tracer" où il y a des onglets pour les fonctions, droites, suites et équations paramétriques. On pourra donc cliquer sur "ajouter" pour ajouter un widget données, on pourra alors choisir sur ce même widget les personnalisations graphiques:
     
     
    Petite, ou pour moi grande innovation dans cette version, quelque chose que je n'ai vu nul part ailleurs, ce que j'ai nommé "sélecteurs", ce sont les sortes de "pins" au dessus des colonnes dans l'image en dessous, on peut les déplacer à la souris pour choisir quelle colonne fera office des abscisse, et l'autres de ordonnées, ou bien l'angle et la distance si on est en coordonnées polaires. Une fois déplacées et lâchées, elle est automatiquement animée pour se mettre au centre de la colonne où elle a été lâchée, ou bien une permutation s'effectue si on la lâche au dessus de l'autre "sélecteur du même type.
     
     
     
     
    Le "sélecteur" bleu est une sorte de sélecteur universel, on peut le mettre sur les colonnes, entre les colonnes, sur les lignes (à gauche des lignes dans le petit espace vide, il suffit de cliquer dessus pour que ça apparaît) et entre les lignes. Le GroupBox, dans l'image il porte le titre "actions sur la colonne" s'adapte en fonction de la position du "sélecteur" bleu. Et propose diverses actions:
     
     
    - Quand il est entre deux colonnes/lignes, il ne proposera que l'action "insérer" pour insérer une ligne/colonne.
    - Quand il est sur une ligne, il ne proposera que "supprimer"
    - Quand il est sur une colonne, et c'est là que ça devient intéressant: il propose ce que vous lisez sur l'image, pour l'instant, si vous avez des propositions, feel free to suggest !
     
     
     

    Remplir:




     

     
    Deux types de "remplissage" sont proposées:
     
     
    - à partir d'une expression, c'est la plus intéressante ! On vous propose x' en fonction de x, ou x' représente la nouvelle valeur de la cellule à calcule et à y mettre, et x l'ancienne valeur de la cellule. On pourra alors utiliser les noms des autres colonnes comme variables dans l'expression, par exemple: si on met " x' = Volume * x " ça multipliera chaque valeur de la cellule de la colonne "avancement" par la valeur dans la même ligne dans la colonne "Volume". On pourra aussi utiliser les fonctions et suites déclarées dans les autres onglets, tout sera interconnecté ! 
     
     
    Le problème de ce remplissage est qu'il faut qu'il y ait déjà des valeurs dans les cellules, c'est là où intervient le deuxième type de remplissage:
    - à partir d'une valeur de départ, d'un pas et d'une arrivée, et ça remplira la colonne case par case avec ces paramètres là. On peut bien sûr combiner les deux remplissages. Par exemple: On veut remplir une colonne avec les 10 premiers termes de la suite u, donc on remplit d'abord la colonne avec des entiers de 1 à 10 avec le deuxième remplissage, puis on applique un second remplissage avec une expression, qui sera " x' = u(x) "
     
     
    Trier:
    Tout est dans le titre... Un petit screen pour bien comprendre quelques subtilités:
    Voilà tout pour l'instant pour ce qui est du développement en lui même.
    Pour ceux qui souhaiteraient essayer et/ou voir le dernier code en date, j'ai ajouté un gestionnaire de version git chez sourceforge: " git://git.code.sf.net/p/zegrapher/code zegrapher-code "

     
    Merci !

     
    PS: Je tiens compte de ton avis, J-C Bubbendorf, sinon désolé pour le retard, je n'ai pas eu de notification que quelqu'un a posté ici...

    -
    Edité par AdelKS 1 mai 2013 à 15:42:56

    • Partager sur Facebook
    • Partager sur Twitter
      11 mai 2014 à 23:07:02

      Bonsoir

      Logiciel pratique.

      je ne sais pas comment représenter la fonction x². j'ai essayé (x²), (x)(x), ((x))² , mais sans succès.

      Si quelqu'un à une idée ou une référence pour mieux applique Zegrapher, merci d'avance

      • Partager sur Facebook
      • Partager sur Twitter
        13 mai 2014 à 17:28:21

        x^2, à la place de x² serait la première tentative de correction. ^_^

        Tu as essayé de rentrer ça où ?

        • Partager sur Facebook
        • Partager sur Twitter
        "Il est impossible pour un homme d'apprendre ce qu'il croit déjà connaître"
          23 juillet 2015 à 22:40:08

          Salut tout le monde!

          Bien sûr, ZeGrapher n'est pas mort, loin de là... La preuve est qu'une version 3.0 va bientôt sortir! Oui celle que je voulais sortir il y a deux ans :p
          Il s'est avéré qu'il y avait beaucoup de travail à faire pour qu'elle soit fonctionnelle.

          Quoiqu'il en soit, le code source actuel est compilable et fonctionne plutôt bien! à vous de tester :

          git clone git://git.code.sf.net/p/zegrapher/code ZeGrapher  

          Commentaires, suggestions, bugs, c'est ici, pour ceux qui vont le tester bien sûr !

          • Partager sur Facebook
          • Partager sur Twitter
            25 juillet 2015 à 18:30:59

            Salut kide65,

            Ton projet à l'air pas mal du tout, j'irai regarder plus en détail le site de ton projet quand j'aurai un peu plus de temps.

            Sinon, juste quelques petites questions concernant les fonctionnalités de ton logiciel:

            Est-il capable de représenter des courbes et surfaces paramétrée?

            Des fonctions allant de R^n à R (ou R^m) (m<=3)?

            Les courbes de niveaux et vecteurs tangents?

            En tout cas, je vais suivre ton projet avec intérêt.

            Bon travail pour tout ce que tu as déjà fait, et bon courage pour la suite.

            Bonne soirée.

            • Partager sur Facebook
            • Partager sur Twitter
            Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
              26 juillet 2015 à 22:21:28

              Bonjour! 

              Eh bien toutes les représentations que peut faire ZeGrapher sont sur le plan. De toutes tes questions, la seule pour laquelle ma réponse est positive est pour les courbes paramétrées. Sinon, pour l'instant, je ne compte pas sortir du plan car il y a assez de travail à faire dessus :)

              • Partager sur Facebook
              • Partager sur Twitter
                29 octobre 2015 à 23:56:01

                Bonjour,

                La version 3.0 est presque finalisée, est-ce que de bonnes âmes auraient-elles pitié de moi et voudraient bien le tester pour des bugs ? 

                https://github.com/AdelKS/ZeGrapher.git

                Surtout sur la partie données! Je prends toute suggestion sur une éventuelle finition à faire.

                Voilà! merci :)

                • Partager sur Facebook
                • Partager sur Twitter
                  26 avril 2016 à 15:15:36

                  Salut!

                  La nouvelle version de ZeGrapher est enfin publiée! 
                  Tout ce qui a à savoir est sur zegrapher.com

                  Voilà. à bientôt. 

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    29 avril 2016 à 2:55:33

                    Hello !

                    Je viens de tester ton application et je peux déjà te dire qu'elle est plutôt clean. ;) Certaines fonctionnalités ne sont pas tout de suite faciles à comprendre, sans doute du fait du manque crucial de tooltip (infobulles). Je pense par exemple au tracé des suites mais surtout à celui impliquant les "Données". Sinon globalement, je ne peux que te féliciter, même s'il me semble que des applications similaires existent déjà.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 avril 2016 à 18:13:53

                      Oui je comprends! Vu le temps que j'ai et l'innombrable choses qu'il faudrait ajouter, je fais des choix dont celui de ne pas faire une aide de A à Z et plutôt miser sur l'intuition. D'ailleurs quelqu'un qui n'aurais jamais utilisé de calculatrice graphique aura peut être plus de mal à trouver les choses, mais je trouve (à tord ?) que le clavier virtuel donne à peu près tout ce qui est possible de faire comme expression.

                      Sinon, au niveau des suites: toi aussi tu n'as pas su au début comment écrire les termes antérieurs de la suite lors d'une expression par récurrence ? C'est vrai qu'écrire "Un = " dans le logiciel avec le "n" en indice peut tromper l'utilisateur qui peut penser qu'il faut aussi mettre des n en indice pour écrire son expression... Je crois que je vais les réécrire avec " u(n) = " et comme ça tout le monde comprend.

                      Pour ce qui est des données, là je suis d'accord qu'il faut une petite documentation, que j'ai faite! Il faut cliquer sur le bouton d'aide noir en haut à droite de la fenêtre de saisie ça fera apparaître une fenêtre qui explique tout ce qui peut être fait.

                      Je suis preneur de toute idée de présentation des choses qui pourrait les rendre plus intuitives à utiliser! :)

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        29 avril 2016 à 20:29:56

                        Je suis d'accord avec l'idée de ne pas faire une aide. Par contre, des infobulles (tooltip) peuvent être d'une très grande utilité.

                        De plus, lorsque l'application est fraîchement installée,  la barre de titre les différentes fenêtres qui s'affichent (Fenêtres > Tableau de valeurs par exemple) n'est jamais affichée (car la fenêtre est positionnée trop haut). Il faut donc soit redimensionner la fenêtre afin d'afficher la barre de titre, soit utiliser le raccourcis Alt+F4 pour fermer la fenêtre. Je pense aussi qu'il aurait été intéressant de pouvoir fermer une fenêtre (exceptée la MainWindow) avec le raccourci Echap (touche du clavier). Mais si les fenêtres en question ne sont pas des QDialog, inutile de gérer ce raccourcis.

                        S'agissant des suites, pour avoir fait trois en post bac en département de Maths, disons que je comprends plutôt bien ce qu'il en est. ;) Mais le problème avec l'interface est que en supposant que n_min représente la plus petite valeur de n pour laquelle u_n est définie, on est un peut embrouillé avec la deuxième lineEdit où on peut rentrer les valeurs de u_0, u_1, u_2, ... En effet, les valeurs que l'on rentre correspondent plutôt à u_(n_min), u_(n_min+1), ..., soit donc toutes les valeurs particulières de u_n en partant de la plus petite possible (qui ne sera u_0 que si n_min=0). Dans ce cas précis, je pense que les infobulles pourraient être d'une très grande utilité.

                        Sinon je vois que tu es un vrai fanatique de Qt. Peut-être serions-nous appelé à travailler ensemble un de ces jours. Vive Qt !

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 avril 2016 à 22:08:14

                          Oui oui je suis d'accord pour les infobulles, c'est juste que... Bon. Je les ferai un de ces quatre xD

                          Pour ce qui est des fenêtres qui dépassent pour la première fois que le logiciel est lancé (sous Windows), je n'ai aucune idée pourquoi ça fait ça... Mais oui je le savais, mais ce n'est pas très grave vu qu'une fois lancé une première fois, la position et la taille des fenêtres sont enregistrées.

                          Pour les u0, u1... etc, effectivment je me suis dit qu'il fallait que je change les indices quand nmin est modifié, mais bon tout le monde a compris... xD 
                          C'est vrai que je me dis ça souvent sur plusieurs choses, ce qui rend finalement le logiciel un peu plus "difficile" à prendre en main que prévu...

                          Un vrai fanatique de Qt, comment vois-tu ça ??? C'est plutôt que c'est la seule chose que je maîtrise pour faire des fenêtres... Mais j'aime beaucoup c'est vrai.  

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            29 avril 2016 à 23:20:25

                            Bah par fanatique disons que je veux dire que ça se voit que tu aimes bien Qt. D'une part, cela fait près de cinq ans que tu taffes sur le projet et d'autre part, j'ai lu quelque part sur les premières pages (de ce post) que tu traçais toutes les fonctions en usant de paintEvent. C'est dire...

                            Sinon concernant le mauvais positionnement des fenêtres, intuitivement, je dirais que la valeur lue depuis le/les fichier(s) de sauvegarde lorsqu'aucune sauvegarde n'a encore été faite (au premier démarrage par exemple) est invalide. "Essayer QWidget::setPos(0, 0) et voir si le comportement étrange persiste" me semble une bonne piste. Mais bon ... c'est du détail.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              30 avril 2016 à 1:04:56

                              Maintenant que j'y pense, passer 5 ans sur un même logiciel... Je me dis et me suis dit que quand je serai plus vieux et je que me demande où j'ai passé mon temps, alors j'ai des traces sur une partie de ce temps passé xD. Je me rappelle de l'énorme joie que j'ai ressenti quand j'ai réussi à voir une parabole sur un widget ! D'ailleurs je viens de remarquer que trois ans se sont écoulés entre les postes de cette page 10, alors qu'en terme de contenu des posts le temps qui semble s'être écoulé est au plus de quelque mois. Dans quel aire on vit, voir le temps passer dans des forums et des logiciels, le tout étant purement virtuel... Enfin j'arrête de philosopher.

                              Pour ce qui est de coder à base de paintEvent, c'est de pouvoir optimiser et avoir des tracés plus rapides que ce que peut gérer Qt avec ses graphicsView, qui se doivent être les plus généraux possibles. Mais je viens d'apprendre récemment l'existence de QtCharts qui apparaîtra dans la prochaine version, j'y jetterai un coup d'oeil une fois que ce sera sorti.

                              Pour la lecture de fichiers de sauvegarde, eh bien je teste si le fichier de sauvegarde existe avant de charger des données:

                              void MainWindow::loadWindowSavedGeomtries()
                              {
                                  /* Restore geometries */
                                  if(settings.contains("main_window/geometry"))
                                      setGeometry(settings.value("main_window/geometry").value<QRect>());
                                  if(settings.contains("settings_window/geometry"))
                                      settingsWin->setGeometry(settings.value("settings_window/geometry").value<QRect>());
                                  if(settings.contains("range_window/geometry"))
                                      rangeWin->setGeometry(settings.value("range_window/geometry").value<QRect>());
                                  if(settings.contains("input_window/geometry"))
                                      inputWin->setGeometry(settings.value("input_window/geometry").value<QRect>());
                                  if(settings.contains("image_export_window/geometry"))
                                      imageExportWin->setGeometry(settings.value("image_export_window/geometry").value<QRect>());
                                  if(settings.contains("values_window/geometry"))
                                      valuesWin->setGeometry(settings.value("values_window/geometry").value<QRect>());
                                  if(settings.contains("print_window/geometry"))
                                      printWin->setGeometry(settings.value("print_window/geometry").value<QRect>());
                                  if(settings.contains("virtual_keyboard_window/geometry"))
                                      keyboard->setGeometry(settings.value("virtual_keyboard_window/geometry").value<QRect>());
                              
                              }

                              Vois-tu quelque chose qui cloche là-dessus ?

                              -
                              Edité par AdelKS 30 avril 2016 à 1:06:18

                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                1 mai 2016 à 1:44:30

                                Oui, je suis bien d'accord : la durée de vie d'un flux de discussion dédié à la présentation d'un projet diffère souvent du temps effectif passé sur le développement de celui-ci.

                                Sinon, je ne suis pas sûr que opter pour l'utilisation d'un QWidget pour lequel paintEvent est redéfini soit meilleure que opter pour une QGraphicsView directement. Mais bon, tout dépend sans doute de ce dont tu as réellement besoin...

                                Enfin, concernant le code que tu montres, à priori le problème ne viendrait pas de loadWindowSavedGeomtries mais plutôt de ce que tu fais pour afficher la fenêtre (dont l'affichage est sollicitée). show() ? setVisible(true) ? Mais dans tous les cas, je pense que effectuer un move(0, 0) pourrais résoudre le problème, mais peut-être que le problème se trouve complètement ailleurs dans le code.

                                -
                                Edité par Anonyme 1 mai 2016 à 1:53:04

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  1 mai 2016 à 20:15:10

                                  Je ne suis pas sûr non plus que ce que j'ai fait est plus rapide, j'aimerais bien tester la différence mais j'ai pas envie de coder la chose. Je testerai sinon volontiers un autre logiciel de tracé de courbes sous graphicsView.

                                  Pour afficher les fenêtres, j'utilise des show() connecté directement avec les signaux des QActions... Bref. <strong>move(0,0)</strong> ne donnerait pas le même résultat (je ne me rappelles plus s'il tient compte de la bordure des fenêtres le move) ? En tous cas, je n'ai pas ce problème sous linux.

                                  à plus!

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 octobre 2017 à 12:57:16

                                    Heyo !

                                    Une petit mise à jour est disponible, surtout des corrections de bugs divers et variés. La version Windows est en auto-extract 7zip maintenant !
                                    Aussi, le site web a été légèrement modifié visuellement, c'est plus joli :p

                                    Voilà, à bientôt !

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      6 janvier 2020 à 23:39:21

                                      Bonjour tout le monde!

                                      Tout d'abord, bonne année ! En cadeau de début d'année une petite mise à jour. Au menu:

                                      • Un nouveau logo ! Dites moi ce que vous en pensez :)
                                      • Un nouveau site web, basé sur l'une des templates d'HTML5 Up. Vos retours sont les bienvenus aussi (je suis au courant des titres qui dépassent les box, je corrigerai ça)
                                      • Gestion des limites des la représentation décimale: on ne peut normalement plus le faire crasher en zoomant ou en dézoomant à max.
                                      • Animation de zoom plus fluides, qui se font à la fréquence de rafraîchissent de l'écran maintenant (et animation des widgets de zoom aussi). Je n'ai pas réglé l'animation des équations paramétriques pour le moment car ça aurait empiété sur la grosse mise à jour.
                                      • Mise à jour des abscisses et ordonnées en puissances de 10

                                      Alors entendons le bien, ce n'est qu'une petite mise à jour, le gros travail n'est pas encore publié (en résumé: échelle log généralisée, export PDF/SVG 2.0, variables qu'on peut animer et utiliser dans tous les autres objets) et j'espère le publier cette année.

                                      Le code est les exécutables sont sur Github et sur zegrapher.com !

                                      Linuxiens: plus de souci de lancement, je fourni des AppImage maintenant (il suffit de les rendre exécutables puis de double cliquer dessus).

                                      Windowsiens: vous savez quoi faire, rien à signaler.

                                      Macosiens: pour une fois vous avez une version au même temps que les autres. Mais, parce qu'il y a un mais, j'ai remarqué que le graphe est flou sur le Mac sur lequel j'ai compilé. C'est une histoire d'écrans HiDPI, j'investiguerai tout ça. Mais cette sécheresse de versions Mac est finie! J'ai découvert que TravisCI compile pour Mac, je vais mettre en place une pipeline.

                                      à toute!

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      [Logiciel] ZeGrapher

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown