Re: Spiegazione disegno realizzato con TikZ

#82210
Up
0
Down
::


Quel ciclo in effetti potrebbe essere riscritto in un altro modo (che spiego dopo). Come è stato fatto notare quel ciclo serve soltanto per aggiornare il valore di densità in modo consistente; ossia: `\pgfmathsetcounter{density}{\thedensity+10}
\setcounter{density}{\thedensity}
` aggiunge 10 al valore corrente del contatore e successivamente setta il contatore con il nuovo valore. Il contatore inizialmente vale: `
\setcounter{density}{20}
` quindi dopo il primo ciclo il suo valore sarà 30. Con questo trucchetto ad ogni successivo ciclo si mantiene il contatore aggiornato: `x=2 => \thedensity=40` Alla fine il valore di [tt]\thedensity[/tt] sarà 170 (puoi testarlo con [tt]\node

at (0,0) {\thedensity};[/tt] fuori dal ciclo). Come fare per usare effettivamente la [tt]\x[/tt] nel ciclo? Con la chiave`evaluate=\x as \altro using formula` vedi pagina 507-508 del manuale. Quindi: `
\foreach \x[evaluate=\x as \mydensity using int(\x*10+\thedensity)] in {1,…,15}{%

\draw[fill=\couleur!\mydensity] (A)–(B)–(C)–cycle;
}
` Uso [tt]int(formula)[/tt] solo per evitare che TikZ piazzi un [tt].0[/tt] finale ai valori che sarebbero interpretati come angolo dell’ancora (vedi http://tex.stackexchange.com/questions/94787/difference-between-newcommand-and-pgfmathsetmacro-used-in-tikz-coordinate).

Allego un documento in cui si confrontano il metodo di Alain e l’uso di [tt]evaluate[/tt] (confrontando i valori finali dei contatori): `
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\begin{document}
\newcounter{density}
\setcounter{density}{20}
\begin{tikzpicture}
\def\couleur{MidnightBlue}
\path[coordinate] (0,0) coordinate(A)
++( 60:12cm) coordinate(B)
++(-60:12cm) coordinate(C);
\draw[fill=\couleur!\thedensity] (A) — (B) — (C) — cycle;
\foreach \x[evaluate=\x as \mydensity using int(\x*10+\thedensity)] in {1,…,15}{%
\path[coordinate] coordinate(X) at (A){};
\path[coordinate] (A) — (B) coordinate[pos=.15](A)
— (C) coordinate[pos=.15](B)
— (X) coordinate[pos=.15](C);
\draw[fill=\couleur!\mydensity] (A)–(B)–(C)–cycle;
% test per vedere a quanto arriva mydensity
\ifnum\x=15
\node

at (0,0){\mydensity};
\fi
}

\end{tikzpicture}

\begin{tikzpicture}
\def\couleur{MidnightBlue}
\path[coordinate] (0,0) coordinate(A)
++( 60:12cm) coordinate(B)
++(-60:12cm) coordinate(C);
\draw[fill=\couleur!\thedensity] (A) — (B) — (C) — cycle;
\foreach \x in {1,…,15}{%
\pgfmathsetcounter{density}{\thedensity+10}
\setcounter{density}{\thedensity}
\path[coordinate] coordinate(X) at (A){};
\path[coordinate] (A) — (B) coordinate[pos=.15](A)
— (C) coordinate[pos=.15](B)
— (X) coordinate[pos=.15](C);
\draw[fill=\couleur!\thedensity] (A)–(B)–(C)–cycle;
}
\node

at (0,0) {\thedensity};
\end{tikzpicture}
\end{document}

\end{document}
% Name : RotateTriangle
% Encoding : utf8
% Engine : pdflatex
% Author: Alain Matthes
`

Ciao
Claudio

Go to top