Papier pointé et trame triangulaire

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
tnnico
Utilisateur confirmé
Utilisateur confirmé
Messages : 66
Inscription : jeudi 25 juin 2009, 14:06

[Résolu] Papier pointé et trame triangulaire

Message par tnnico »

Bonjour à tous,

Je cherche à faire des dessins sur du papier pointé (où les points forment des triangles équilatéraux) et pour ça j'ai un début de solution pas très satisfaisant avec la macro :

Code : Tout sélectionner

\newcommand{\pointe}[2]{
	\def\fin{5} % la valeur initiale n'a pas d'importance
	\def\fin1{1} % ici aussi !!!
	\pgfmathparse{#2-1}
	\let\fin\pgfmathresult
	\foreach \x in {0,1,...,\fin1}{
		\draw[fill=gray!50,blue] (60:\x) circle (1pt);
		\pgfmathparse{#1-\x/2-1}
		\let\fin\pgfmathresult
		\foreach \y in {1,...,\fin}{
			\filldraw[gray!50,xshift=\y cm] (60:\x) circle (1pt);}
		\pgfmathparse{1+\x/2-1}
		\let\fin\pgfmathresult
		\foreach \y in {0,...,\fin}{
			\filldraw[gray!50,xshift=-\y cm] (60:\x) circle (1pt);}
		}
	}		     
Le premier argument est le nombre de points en colonne et le deuxième, le nombre de lignes.

Elle marche convenablement, mais je pense qu'il y a plus simple...

Et surtout, je voudrais aussi dessiner une trame de triangles équilatéraux avec des lignes qui passent par ces points.

Et là, j'ai du mal à m'en sortir...

Quelqu'un a t-il déjà fait ça ? Une idée, sinon ?

D'avance merci,

Nicolas
Dernière modification par tnnico le vendredi 18 décembre 2009, 14:38, modifié 1 fois.

tnnico
Utilisateur confirmé
Utilisateur confirmé
Messages : 66
Inscription : jeudi 25 juin 2009, 14:06

Re: Papier pointé et trame triangulaire

Message par tnnico »

Bonjour encore,

Je me suis aperçu que la macro que je proposais pour le papier pointé avait des défauts, notamment quand le nombre de lignes et de colonnes étaient sesiblement différents.

Je propose donc celle-ci qui permet de faire du papier pointé en triangles équilatéraux :

Code : Tout sélectionner

\newcommand{\pointe}[2]{
	\pgfmathparse{sqrt(3)/2}
	\let\ech\pgfmathresult
	\foreach \y in {1,...,#1}{
		\foreach \x in {1,...,#2}{
			\pgfmathparse{.5*mod(\y-1,2)}
			\filldraw[gray!50] (\x+\pgfmathresult,{(\y-1)*\ech}) circle (1pt);	
			}	
		}
	}			
Je pense qu'on peut encore faire beaucoup mieux.

Je n'ai pas encore trouvé pour dessiner une trame complète.

Mais je cherche...

Nicolas

tnnico
Utilisateur confirmé
Utilisateur confirmé
Messages : 66
Inscription : jeudi 25 juin 2009, 14:06

Re: Papier pointé et trame triangulaire

Message par tnnico »

C'est encore moi, décidément, ça n'a pas passionné grand monde !

Je vous propose quand même cette "jolie" macro qui permet d'obrenir une trame de triangles équilatéraux.

Code : Tout sélectionner

\newcommand{\trametri}[2]{
	\pgfmathparse{sqrt(3)/2}
	\let\ech\pgfmathresult
	\foreach \y in {1,...,#2}{
		\draw[ultra thin] (0.5,{(\y-1)*\ech}) -- ++({#1-.5},0);
		\pgfmathparse{0.5*mod(\y,2)+#1*mod(\y+1,2)}
		\let\abscisse\pgfmathresult
		\pgfmathparse{max(0,min(#2-\y-1,min(#2,2*#1-1)))}
		\let\long\pgfmathresult
		\pgfmathparse{1+mod(\y+1,2)}
		\let\cote\pgfmathresult
		\draw[ultra thin] (\abscisse,{(\y)*\ech}) -- ++({60*\cote}:\long);
		}
	\foreach \x in {1,...,#1}{
			\pgfmathparse{min(2*\x-1,#2-1)}
			\let\long\pgfmathresult
			\pgfmathparse{min(2*(#1-\x),#2-1)}
			\let\longa\pgfmathresult		
			\draw[ultra thin] (\x,0) -- ++(120:\long);	
			\draw[ultra thin] (\x,0) -- ++(60:\longa);			
			}			
	}	     
où le premier argument représente la "largeur" et le deuxième la "hauteur".

Peut-être cela servira-t-il à quelqu'un...

Nicolas

projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 1903
Inscription : samedi 29 décembre 2007, 00:58

Re: [Résolu] Papier pointé et trame triangulaire

Message par projetmbc »

Mets un petit exemple visuel. C'est plus "vendeur"...

tnnico
Utilisateur confirmé
Utilisateur confirmé
Messages : 66
Inscription : jeudi 25 juin 2009, 14:06

Re: [Résolu] Papier pointé et trame triangulaire

Message par tnnico »

Je vais avoir l'air nul, mais je ne sais pas comment insérer une image (sachant que je n'ai aucun autre endroit pour la stocker à part sur mon ordi perso)...

Nico

Altermundus
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 557
Inscription : lundi 28 mai 2007, 10:31
Statut actuel : Autre
Localisation : Paris

Re: [Résolu] Papier pointé et trame triangulaire

Message par Altermundus »

tnnico a écrit :Je vais avoir l'air nul, mais je ne sais pas comment insérer une image (sachant que je n'ai aucun autre endroit pour la stocker à part sur mon ordi perso)...

Nico
Bonjour

J'ai essayé et c'est intéressant mais il faudrait aussi mettre un exemple complet (ECM --> FAQ) car
certains peuvent avoir des difficultés à compléter. Pour l'image, il suffit de voir la FAQ.

Puis-je publier des images?
Oui, vous pouvez afficher des images dans vos messages. Par ailleurs, si l’administrateur a autorisé les fichiers joints, vous pouvez transférer une image sur le forum. Autrement, vous devez lier une image placée sur un serveur Web public, exemple: http://www.exemple.com/mon-image.gif. Vous ne pouvez pas lier des images de votre ordinateur (sauf si c’est un serveur Web public) ni des images placées derrière des mécanismes d’authentification, exemple: Boîtes e-mail Hotmail ou Yahoo!, sites protégés par un mot de passe, etc. Pour afficher l’image, utilisez la balise BBCode [img].


Alain Matthes

tnnico
Utilisateur confirmé
Utilisateur confirmé
Messages : 66
Inscription : jeudi 25 juin 2009, 14:06

Re: [Résolu] Papier pointé et trame triangulaire

Message par tnnico »

Bien, je ne sais toujours pas comment insérer une image (à part m'ouvrir un compte pour héberger un site web ou utiliser celui de quelqu'un)... Je n'ai pas trouvé dans la FAQ le moyen de l'envoyer directement sur le forum...

Le fichier ci-dessous est "complet" :

Code : Tout sélectionner

\documentclass[10pt]{article}

\usepackage[latin1]{inputenc}
\usepackage[francais]{babel}
\usepackage{tikz}
    
\newcommand{\pointe}[2]{
	\pgfmathparse{sqrt(3)/2}
	\let\ech\pgfmathresult
	\foreach \y in {1,...,#1}{
		\foreach \x in {1,...,#2}{
			\pgfmathparse{.5*mod(\y-1,2)}
			\filldraw[gray!50] (\x+\pgfmathresult,{(\y-1)*\ech}) circle (1pt);	
			}	
		}
	}			

\newcommand{\trametri}[2]{
	\pgfmathparse{sqrt(3)/2}
	\let\ech\pgfmathresult
	\foreach \y in {1,...,#2}{
		\draw[ultra thin] (0.5,{(\y-1)*\ech}) -- ++({#1-.5},0);
		\pgfmathparse{0.5*mod(\y,2)+#1*mod(\y+1,2)}
		\let\abscisse\pgfmathresult
		\pgfmathparse{max(0,min(#2-\y-1,min(#2,2*#1-1)))}
		\let\long\pgfmathresult
		\pgfmathparse{1+mod(\y+1,2)}
		\let\cote\pgfmathresult
		\draw[ultra thin] (\abscisse,{(\y)*\ech}) -- ++({60*\cote}:\long);
		}
	\foreach \x in {1,...,#1}{
			\pgfmathparse{min(2*\x-1,#2-1)}
			\let\long\pgfmathresult
			\pgfmathparse{min(2*(#1-\x),#2-1)}
			\let\longa\pgfmathresult		
			\draw[ultra thin] (\x,0) -- ++(120:\long);	
			\draw[ultra thin] (\x,0) -- ++(60:\longa);			
			}			
	}	         

\begin{document}

	\begin{tikzpicture}
		\pointe{4}{8}
	\end{tikzpicture}

	\begin{tikzpicture}
		\trametri{4}{8}
	\end{tikzpicture}

\end{document}
En le compilant je me suis aperçu que les 2 arguments de chaque macro ne jouaient pas le même rôle (largeur <--> hauteur).

Ce n'est pas compliqué à changer (il suffit d'inverser #1 et #2 dans l'une des deux).

Désolé pour le manque d'images...

Cordialement,
Nicolas

sylcha
Utilisateur débutant
Utilisateur débutant
Messages : 4
Inscription : jeudi 13 septembre 2007, 13:01
Statut actuel : Collégien

Re: [Résolu] Papier pointé et trame triangulaire

Message par sylcha »

Bonjour !

J'ai retouché la macro 'pointe' ci-dessous : elle ne respectait pas les dimensions passées en arguments... ça donne :

Code : Tout sélectionner

\newcommand{\pointe}[2]{
\begin{scope}
\clip (0,0) rectangle (#1,#2);
   \pgfmathparse{sqrt(3)/2}
   \let\ech\pgfmathresult
 \pgfmathparse{(2*#2)/sqrt(3)+1}
   \foreach \y in {1,...,\pgfmathresult}{
      \foreach \x in {0,...,#1}{
         \pgfmathparse{.5*mod(\y-1,2)}
         \filldraw[gray!50] (\x+\pgfmathresult,{(\y-1)*\ech}) circle (1pt);   
         }   
      }
\end{scope}
   }
en espérant avoir été utile...

sylvain.