[Tikz] Pavage

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

[Tikz] Pavage

Messagepar evariste_G » Dimanche 28 Novembre 2010, 19:09

Bonjour à tous.
J'essaie depuis quelques temps de faire un pavage avec des hexagones en TiKZ mais franchement, je galère ...

Voici ce que j'ai fait :

Code: Tout sélectionner
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usepackage[margin=0cm]{geometry}
\newcommand{\hexagone}
{%
   \foreach \i in {0,1,2,3,4,5}
   {
      \pgfmathparse{cos(60*\i)}\let\x\pgfmathresult
      \pgfmathparse{sin(60*\i)}\let\y\pgfmathresult
      \coordinate (A\i) at (\x,\y);
      \pgfmathparse{1.05*cos(60*\i)}\let\x\pgfmathresult
      \pgfmathparse{1.05*sin(60*\i)}\let\y\pgfmathresult
      \coordinate (B\i) at (\x,\y);
      \pgfmathparse{.95*cos(60*\i)}\let\x\pgfmathresult
      \pgfmathparse{.95*sin(60*\i)}\let\y\pgfmathresult
      \coordinate (C\i) at (\x,\y);
   }
   
   \draw[DarkGrey,ultra thick] (A0) -- (A1) -- (A2) -- (A3) -- (A4) -- (A5) -- cycle;
   \draw[DarkGrey,ultra thick,opacity=.5] (B0) -- (B1) -- (B2) -- (B3) -- (B4) -- (B5) -- cycle;
   \draw[DarkGrey,ultra thick,opacity=.5] (C0) -- (C1) -- (C2) -- (C3) -- (C4) -- (C5) -- cycle;
}
\setlength{\parindent}{0pt}
\begin{document}
\pagecolor{black}
\begin{tikzpicture}
\clip (0,0) rectangle +(\paperwidth,\paperheight);
\foreach \y in {-10,-9,...,15}
{
\foreach \i in {1,2,...,15}
{
   \pgfmathparse{\i*1.47-1}\let\translx\pgfmathresult
   \pgfmathparse{\i*.89+1.75*\y}\let\transly\pgfmathresult   
   \begin{scope}[xshift=\translx cm,yshift=\transly cm]
      \hexagone
   \end{scope}
}
}
\end{tikzpicture}
\end{document}


Mais je suis pas du tout content de ce code, qui prend trop de temps à compiler. Sans compter que je voudrais faire d'autres chose (répéter ce pavage un certain nombre de fois en faisant une homothétie de coefficients 1, 0.8, 0.6, 0.4, et 0.2 et en appliquant une opacité de mêmes coefficients), l'objectif étant d'avoir à peu près un pavage comme en en-tête du site http://dev.ulb.ac.be/urem/.


Quelqu'un aurait-il une idée ?
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1432
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: [Tikz] Pavage

Messagepar projetmbc » Dimanche 28 Novembre 2010, 21:52

Bonsoir,
il y a des choses intéressantes faites avec TexGraph ici.
projetmbc
Péta-utilisateur
 
Messages: 1897
Inscription: Samedi 29 Décembre 2007, 00:58
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar evariste_G » Lundi 29 Novembre 2010, 15:53

Bonjour. Merci pour la réponse. Je vais m'y pencher.
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1432
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar Altermundus » Lundi 29 Novembre 2010, 17:45

Le problème est intéressant mais il me semble qu'il y a plus de 2000 boucles donc si le code n'est pas optimisé
cela va ramer un peu. Je n'ai pas trop le temps car je termine mes docs pour tous mes packages mais
je regarderai bientôt. cela dit je compile ma dernière doc de 120 pages avec 250 figures dans le même
temps.
Je pense que si ta solution est naturelle, tu peux trouver les points plus facilement par exemple par translation

Alain
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar evariste_G » Lundi 29 Novembre 2010, 17:58

J'ai essayé par translation, mais là, la compilation est très longue ... Donc ça n'est pas intéressant. Mais je dois mal m'y prendre ... :|
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1432
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar Altermundus » Lundi 29 Novembre 2010, 19:38

evariste_G a écrit:J'ai essayé par translation, mais là, la compilation est très longue ... Donc ça n'est pas intéressant. Mais je dois mal m'y prendre ... :|


Toujours pas trop le temps mais il faut éviter \pgfmathparse
" \pgfmathqparse is about twice as fast as \pgfmathparse" ce serait déjà mieux

De plus il faudrait je pense privilégier les opérations élémentaires du genre
pgfmathadd, pgfmathmul etc. Je n'ai jamais essayé mais il se peut que
pgfmathadd@ etc. soit plus rapide.

Enfin il est possible que même fp soit plus rapide. Je trace en ce moment des courbes paramétrées
avec 10 000 couples de points plus rapidement et en passant par gnuplot. Je parie que l'on peut accélérer
le truc. Tiens moi au courant de tes essais. Je pense terminer dans quelques jours mon boulot
tkz-base + euclide + fct

Alain
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar OG » Lundi 29 Novembre 2010, 22:49

Bonsoir

Pourquoi la commande hexagone doit faire une boucle et des calculs ?
N'est-il possible de calculer en dur les coordonnées de tous les points
une fois pour toute et créer ainsi une macro certes illisible mais efficace ?

O.G. qui n'a pas (encore) proposé une solution asymptote, surpris non ?
OG
Modérateur
 
Messages: 2285
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: [Tikz] Pavage

Messagepar Altermundus » Mardi 30 Novembre 2010, 11:30

oui c'est ce que je proposais sans le développer, en parlant de translation.

Il y a finalement qu'une rangée de points à déterminer puis il faut translater ce que tikz fait facilement.
Le problème ensuite est de remplir les hexagones, donc il faut nommer les points correctement.
C'est un truc que je peux faire avec tkz-euclide mais je termine ma correction de doc avant

Alain
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar Zero_est_nul » Vendredi 03 Décembre 2010, 14:24

Passionnant!
Voici une manière de procéder qui m'a l'air +/- optimale.
- Aucun calcul de trigo, pas de pgfmathparse,
- utilisation intensive des déplacements relatifs (j'adore ça!) + coordonnées polaires,
- aucun segment tracé deux fois.

Attention! Dans ce code, on ne remplit pas d'hexagones: pas de \fill donc pas d'hexagones de couleurs différentes. Ca, c'est un autre job, le post reste ouvert!

Salut à tou(te)s les passionné(e)s

Code: Tout sélectionner
%Exemple minimal pour un pavage hexagonal sous Tikz.
\documentclass{minimal}
\usepackage{tikz}

\begin{document}
   \begin{tikzpicture}
      \foreach \i in {0,3,...,9}{
          \foreach \j in {0,...,5}{
            \begin{scope}[xshift=\i cm,yshift={\j*1.73052 cm}]
               \draw[red] (0:0) -- ++ (60:1cm)-- ++ (0:1cm)--++(-60:1cm)--++(0:1cm);
               \draw[blue] (0:0)--  ++ (-60:1cm) ++ (0:1cm) --++(60:1cm);
            \end{scope}
            }
         }
   \end{tikzpicture}
\end{document}
Dernière édition par pg le Vendredi 03 Décembre 2010, 17:18, édité 1 fois.
Raison: Utilisation des balises code pour le code source
Zero_est_nul
Déca-utilisateur
 
Messages: 26
Inscription: Jeudi 28 Juin 2007, 13:02
Localisation: Belgique
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar evariste_G » Vendredi 03 Décembre 2010, 14:29

Bonjour.
C'est un très beau code que voilà ! J'aime beaucoup la philosophie adoptée. Bravo !
Mathématiques, LaTeX et Python : http://www.mathweb.fr
Cours particuliers de maths et de NSI : https://cours-particuliers-bordeaux.fr/
evariste_G
Téra-utilisateur
 
Messages: 1432
Inscription: Vendredi 19 Décembre 2008, 19:13
Localisation: Bordeaux
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar Altermundus » Vendredi 03 Décembre 2010, 18:35

evariste_G a écrit:Bonjour.
C'est un très beau code que voilà ! J'aime beaucoup la philosophie adoptée. Bravo !


Oui on est sur la bonne voie mais c'est encore insuffisant car des points sont utilisés plusieurs fois et ils ne va pas être facile
de nommer les points pour désigner les hexagones.
Pour nommer techniquement c'est facile après chaque (x,y) on place coordinate (\i,\j) on on peut pour distinguer le suivant
utiliser (\i,\jj) \jj étant \j +1 (cela se fait avec un compteur etc... mais il y a encore du boulot sur le plan stratégique.

Alain Matthes
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar Zero_est_nul » Vendredi 03 Décembre 2010, 19:50

Il est sans doute bon d'explorer plusieurs pistes.
Voici une manière de générer le pavage qui permet, peut-être, de mieux identifier les pavés...
On part des racines cubiques de l'unité et on les translate avec les multiples entiers des vecteurs $\vec{t_1}$ et $\vec{t_2}$ de composantes respectives $\begin{pmatrix}0\\ \sqrt{3\,} \end{pmatrix}$ et $\begin{pmatrix}\frac32 \\ \frac{\sqrt{3\,}}{2} \end{pmatrix}$

Code: Tout sélectionner
\documentclass{minimal}
\usepackage{tikz}

\begin{document}
% Pavage Hexagonal 2
   \begin{tikzpicture}
      \foreach \i in {-2,...,3}{
          \begin{scope}[yshift={\i*1.73052 cm}]
             \foreach \j in {-3,...,2}{
               \begin{scope}[xshift={\j*1.5 cm},yshift={\j*0.86603 cm}]      
                  \draw[->] (0:0)--(0:0.9cm);
                  \draw[->] (0:0)--(120:0.9cm);
                  \draw[->] (0:0)--(240:0.9cm);
               \end{scope}
               }
         \end{scope}
         }
         \draw[->,thick,red] (0:0)--(0:0.9cm);
         \draw[->,thick,red] (0:0)--(120:0.9cm);
         \draw[->,thick,red] (0:0)--(240:0.9cm);
         \draw[->,thick,blue] (0,0)--(0,1.73)node[right,midway]{$\vec{t_1}$};
         \draw[->,thick,blue] (0,0)--(1.5,0.866)node[above,midway]{$\vec{t_2}$};
   \end{tikzpicture}
\end{document}


On en rediscute, bien sûr!
Zero_est_nul
Déca-utilisateur
 
Messages: 26
Inscription: Jeudi 28 Juin 2007, 13:02
Localisation: Belgique
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar Zero_est_nul » Mardi 07 Décembre 2010, 08:14

Tiens, en passant, et pour continuer sur le même sujet...
J'aurais voulu générer radialement le pavage hexagonal avec un code optimisé et rapide, oeuf corse.
Jusque là, en effet, on générait avec deux translations et on clippait au besoin.

Si quelqu'un a déjà travaillé sur la chose...

Merci
Zero_est_nul
Déca-utilisateur
 
Messages: 26
Inscription: Jeudi 28 Juin 2007, 13:02
Localisation: Belgique
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar Altermundus » Mardi 07 Décembre 2010, 11:48

Zero_est_nul a écrit:Tiens, en passant, et pour continuer sur le même sujet...
J'aurais voulu générer radialement le pavage hexagonal avec un code optimisé et rapide, oeuf corse.
Jusque là, en effet, on générait avec deux translations et on clippait au besoin.

Si quelqu'un a déjà travaillé sur la chose...

Merci


Je vais aborder sérieusement la question, dès que mon envoi sur CTAN sera fait

Alain
Altermundus
Giga-utilisateur
 
Messages: 557
Inscription: Lundi 28 Mai 2007, 09:31
Localisation: Paris
Statut actuel: Actif et salarié | Enseignant

Re: [Tikz] Pavage

Messagepar AndréC » Dimanche 17 Avril 2016, 13:30

J'ai écrit un autre code qui utilise les chemins relatifs plus simple que les précédents :

Code: Tout sélectionner
\usepackage{pgf,tikz}
\begin{tikzpicture}
\def\hexagonalpath{--++(60:1)--+(120:1)++(0,0)--++(1,0)--++(60:1)--+(1,0)++(-120:1)--++(-60:1)
}
% Le pavage hexagonal
 \foreach \j in {0,1,2} {
\foreach \i in {0,1,...,4} {\draw (60:\j)++(120:\j)++
(60:\i)++(-60:\i)++(\i,0)++(\i,0) \hexagonalpath;
}
}
 \end{tikzpicture}
AndréC
Déca-utilisateur
 
Messages: 18
Inscription: Dimanche 17 Avril 2016, 13:25
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot] et 7 invités