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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Package luadraw pour LuaLaTeX, pour créer des graphiques mathématiques en utilisant le langage Lua

Le , par mittag

20PARTAGES

5  0 
Bonjour,

Un paquet appelé luadraw pour LuaLaTeX a été mis en ligne à cette adresse , dont voici un rapide descriptif :

Le paquet luadraw définit l'environnement du même nom, celui-ci permet de créer des graphiques mathématiques en utilisant le langage Lua. Ces graphiques sont dessinés au final par tikz (et automatiquement sauvegardés), alors pourquoi les faire en Lua ? Parce que celui-ci apporte toute la puissance d'un langage de programmation simple, efficace, capable de faire des calculs, tout en utilisant les possibilités graphiques de tikz. Pas besoin de logiciel de dessin externe puisque c'est Lua qui fait le travail. Pour l'instant c'est limité à la 2d.
Un exemple (c'est du langage Lua dans un document LaTeX):

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    \begin{luadraw}{name=Dcontour}
    local g = graph:new{window={-1,6.5,-1.5,11},size={7,7,0}}
    local i, sin, cos = cpx.I, math.sin, math.cos
    local f = function(x,y) return (x+y)/(2+cos(x)*sin(y)) end
    local rainbow = {Purple,Indigo,Blue,Green,Yellow,Orange,Red}
    local Lz = range(1,10) -- niveaux à tracer
    local Colors = {} -- liste des couleurs une par niveau
    for k = 1,10 do
        table.insert(Colors, palette(rainbow,k/10))
    end
    g:Dgradbox({0,5+10*i,1,1},{legend={"$x$","$y$"},grid=true,
      title="$z=\\frac{x+y}{2+\\cos(x)\\sin(y)}$"})
    g:Linewidth(12)
    g:Dcontour(f,Lz,{view={0,5,0,10}, colors=Colors})
    for k = 1, 10 do
        local y = (2*k+4)/3*i
        g:Dseg({5.25+y,5.5+y},1,"color="..Colors[k])
        g:Labelcolor(Colors[k])
        g:Dlabel("$z="..k.."$",5.5+y,{pos="E"})
    end
    g:Show()
    \end{luadraw}



Il y a une doc en français avec le paquet (luadraw.pdf).
Vous avez lu gratuitement 107 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de mittag
Membre régulier https://www.developpez.com
Le 06/07/2025 à 19:02
Bonjour,

Le package luadraw pour LuaLateX a été mis à jour vers la version 2.0.
Cette nouvelle version amène en plus la possibilité de faire du dessin 3d grâce à une option du package :
Code : Sélectionner tout
\usepackage[3d]{luadraw}
tout en conservant la possibilité du dessin 2d comme dans la version précédente.
Le code est en Lua, mais le rendu final est toujours effectué par tikz en arrière-plan (donc vectoriel). Un exemple dans un document lualatex (il y en a 30 dans la doc) :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
\begin{luadraw}{name=icosaedre}
local g = graph3d:new{window3d={-5,5,-5,5,-5,5}, window={-2.25,2.25,-2,2}, viewdir={40,60},bg="gray",size={10,10},margin={0,0,0,0}}
g:Linejoin("round")
local phi = (1+math.sqrt(5))/2 -- nombre d'or
local A1, B1, C1, D1 = M(phi,-1,0), M(phi,1,0), M(-phi,1,0), M(-phi,-1,0) -- 4 points dans le plan z=0
local A2, B2, C2, D2 = M(0,phi,1), M(0,phi,-1), M(0,-phi,-1), M(0,-phi,1) -- dans le plan x=0
local A3, B3, C3, D3 = M(1,0,phi), M(-1,0,phi), M(-1,0,-phi), M(1,0,-phi) -- dans le plan y=0
-- définition du solide (20 faces)
local ico = {   {A1,B1,A3}, {B1,A1,D3}, {D1,C1,C3}, {C1,D1,B3},
                {B2,A2,B1}, {A2,B2,C1}, {D2,C2,A1}, {C2,D2,D1},
                {B3,A3,A2}, {A3,B3,D2}, {D3,C3,B2}, {C3,D3,C2},
                {A1,A3,D2}, {B1,A2,A3}, {A2,C1,B3}, {D1,D2,B3},
                {B2,B1,D3}, {A1,C2,D3}, {B2,C3,C1}, {C2,D1,C3}  }
g:Dscene3d( -- construction de la scène
    g:addFacet({A2,B2,C2,D2},{color="Navy",twoside=false,opacity=0.8}),
    g:addFacet({A1,B1,C1,D1},{color="Crimson",twoside=false,opacity=0.8}),
    g:addFacet({A3,B3,C3,D3},{color="Chocolate",twoside=false,opacity=0.8}),
    g:addPolyline(facetedges(ico), {color="Gold",width=12}), -- dessin des arêtes uniquement
    g:addDots({A1,B1,C1,D1,A2,B2,C2,D2,A3,B3,C3,D3}, {color="black",scale=1.2}),
    g:addLabel("A1",A1,{style="W",dist=0.1}, "B1",B1,{style="S"}, "C2",C2,{}, "C3",C3,{}, "A3",A3,{style="N"}, "D1",D1,{},  "A2",A2,{},  "D2",D2,{}, "B3",B3,{style="E"}, "C1",C1,{}, "B2",B2,{}, "D3",D3,{style="W"} )
)
g:Show()
\end{luadraw}
Le rendu :

Il y a une doc spécifique à la 2d (luadraw2d.pdf) et une doc spécifique à la 3d (luadraw3d.pdf), mais le dessin 3d suppose connu l'aide du dessin 2d, c'est un prolongement.
[ATTACH]668585d1/a/a/a" />
[ATTACH]668586d1/a/a/a" />
1  0