Vidéos et gif de surfaces (sage/python)

Bonjour,

je voudrais visualiser des surfaces et éventuellement faire des animations avec Sage. J'ai déjà essayé GeoGebra mais il galère énormément à faire ce que je lui demande c'est peut-être la contrainte d'afficher en temps réel ce que je lui demande, je ne sais pas ; mais en général, je pousse vite GeoGebra dans ses retranchements et ça rame comme pas possible).

1) Je voudrais visualiser des graphes de fonctions $\mathbb{R}^2 \rightarrow \mathbb{R}$, et faire en sorte que la couleur d'un point du graphe soit fonction du point en question (par exemple, je voudrais que les points du graphe de hauteur petite soient rouges, et que les points de hauteur grande soient bleus).

2) Je voudrais en tirer des animations, en gif ou en vidéo. Comment faire ?

J'imagine que ces questions sont un peu vagues, donc si vous connaissez des tutos orientés vers ce genre de choses, ça m'intéresse.

Bonne soirée !

Réponses

  • Avec le langage Java, c'est possible. J'ai trouvé sur Internet un programme en Java qui permet de créer des GIF animés. En l'utilisant, j'ai fait cette animation récemment.112924
  • Bonjour marco !

    C'est plutôt joli ! Est-ce que tu peux me donner quelques détails ? Je ne connais rien à Java et je voudrais trouver une solution à mon problème qui ne nécessite pas d'y passer trop de temps...
  • Bonjour Georges,

    Ce qui est embêtant, c'est que Java n'est pas un logiciel ou un langage de calcul mathématique. Si les surfaces que tu veux tracer nécessitent de calculer des séries, des intégrales, des transformées de Fourier, etc, il faudra le programmer. De même, si il faut résoudre des équations sans que la formule donnant la solution soit connue.

    Peut-être peux-tu demander sur le forum "developpez.net" comment résoudre ton problème ? Il y a, sur ce site, un sous-forum consacré à Python.

    forum Python de developpez.net
  • Bonjour,

    un gif animé n'est autre qu'une série d'images "fixes" mises bout-à-bout. Une fois toutes les images créées, j'utilise Imagemagick pour ce travail et généralement en une seule ligne de commande (temps de pause entre chaque image, nombre de boucles ou boucle infinie, etc).

    Il faut juste faire attention à la numérotation des images: image001.gif, image010.gif et ainsi de suite, sinon image10 va s'insérrer juste après image1, ensuite image1, etc.

    Paul
  • Peut-être un code comme celui-ci (je n'ai pas testé) qui utilise python et Imagemagick mentionné par paul18.
  • @raoul.S : Wow, si j'arrive à faire ça ! Pfiou ! Je vais regarder ça, merci !
  • J'ai récupéré le fichier csv et légèrement modifié le code Python pour générer les 70 images.
    # library
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.pyplot as plt
    import pandas as pd
    import seaborn as sns
     
    # Get the data (csv file is hosted on the web)
    # url = 'https://python-graph-gallery.com/wp-content/uploads/volcano.csv'
    fich = 'volcano.csv'
    data = pd.read_csv(fich)
     
    # Transform it to a long format
    df=data.unstack().reset_index()
    df.columns=["X","Y","Z"]
     
    # And transform the old column name in something numeric
    df['X']=pd.Categorical(df['X'])
    df['X']=df['X'].cat.codes
     
    # We are going to do 20 plots, for 20 different angles
    for angle in range(70,210,2):
        # Make the plot
        fig = plt.figure()
        ax = fig.gca(projection='3d')
        ax.plot_trisurf(df['Y'], df['X'], df['Z'], cmap=plt.cm.viridis, linewidth=0.2)
         
        # Set the angle of the camera
        ax.view_init(30,angle)
         
        # Save it
        # filename='Volcano_step'+str(angle)+'.png'
        filename='Volcano_step'+str(angle)+'.png'
        plt.savefig(filename, dpi=96)
        plt.gca()
    

    A noter que "convert" est propre à Linux; il faut le remplacer par "magick" sous Windows. Ici j'ai utilisé "-delay 3" pour la pause et "-loop 0" pour une boucle infinie.
    magick -delay 3 -loop 0 *.png animation.gif
    

    rpzy.gif


    On voit bien ici que l'animation commence avec l'image 100 et finit avec la 98.

    Paul
Connectez-vous ou Inscrivez-vous pour répondre.