Suche nach einer effizienten Alternative zu meinem Tikzpic-Code

Suche nach einer effizienten Alternative zu meinem Tikzpic-Code

Ich habe ein Tikz-Bild mit sich wiederholenden Elementen. Im Moment definiere ich sie einzeln. Aber ich hätte gerne einen Code, der ein Vorlagendreieck definiert, dessen Abmessungen ich kontrolliere (wie in meinem Beispiel über p1,q1) und dessen Ausrichtung ich durch Rotation kontrolliere.

(Bitte beachten Sie, dass dieses Beispiel nur zur Veranschaulichung dient. Ich möchte kompliziertere Muster mit anderen Formen erstellen und die Verwendung weiterer Bibliotheken vermeiden.)

Mein Code:

\documentclass[tikz]{standalone} 
\usetikzlibrary{positioning,graphicx,calc}

\begin{document}
\begin{tikzpicture}

% Gridline

\coordinate (x1) at (-4,+0);
\coordinate (x2) at (+0,-4);
\coordinate (x3) at (+4,+0);
\coordinate (x4) at (+0,+4);

\coordinate (k) at (+0,+0);
\coordinate (p1) at (+4,+0);  %Triangle variable 
\coordinate (q1) at (+0,+4);  %Triangle variable

%---------------------------------

\coordinate (G1) at ($(x1)+(x2)$);
\coordinate (G2) at ($(x3)+(x4)$);

\draw [step=0.5cm,draw=gray] (G1) grid (G2);
%\draw [fill=yellow,opacity=0.5] ($(x1)+(x4)$)--(G2)--($(x3)+(x2)$)--(G1);

%---------------------------------
\coordinate (a1) at (k);
\coordinate (b1) at (p1);
\coordinate (c1) at (q1);

\coordinate (C1) at ($(k)$);
\coordinate (B1) at ($(C1)+(k)+(c1)$);
\coordinate (A1) at ($(B1)-(b1)$);
\draw [fill=black] (A1)--(B1)--(C1)--cycle;

\coordinate (A2) at ($(C1)$);
\coordinate (B2) at ($(A2)+(k)-(c1)$);
\coordinate (C2) at ($(B2)+(k)+(b1)$);
\draw [fill=red] (A2)--(B2)--(C2)--cycle;

\coordinate (A3) at ($(C1)$);
\coordinate (B3) at ($(A3)+(k)-(b1)$);
\coordinate (C3) at ($(B3)+(k)-(c1)$);
\draw [fill=green] (A3)--(B3)--(C3)--cycle;

\coordinate (A4) at ($(C1)$);
\coordinate (B4) at ($(A4)+(k)+(b1)$);
\coordinate (C4) at ($(B4)+(k)+(c1)$);
\draw [fill=blue] (A4)--(B4)--(C4)--cycle;

%---------------------------------
\draw[white,opacity=1] (current bounding box.south west) rectangle 
        (current bounding box.north east);
\end{tikzpicture}
\end{document}

Ausgabe Bildbeschreibung hier eingeben

2. Beispiel

\documentclass[tikz]{standalone} 
\usetikzlibrary{positioning,calc,graphics}

\begin{document}
\begin{tikzpicture}

% Gridline

\coordinate (x1) at (-4,+0);
\coordinate (x2) at (+0,-4);
\coordinate (x3) at (+4,+0);
\coordinate (x4) at (+0,+4);

\coordinate (k) at (+0,+0);
\coordinate (p1) at (+1.75,+0); 
\coordinate (q1) at (+0,+1.75); 
\coordinate (r1) at (+4.5,+0); 
\coordinate (s1) at (+0,+4.5); 

%---------------------------------

\coordinate (G1) at ($(x1)+(x2)$);
\coordinate (G2) at ($(x3)+(x4)$);

\draw [step=0.5cm,draw=none] (G1) grid (G2);
\draw [fill=yellow] ($(x1)+(x4)$)--(G2)--($(x3)+(x2)$)--(G1);

%---------------------------------
\coordinate (a1) at (k);
\coordinate (b1) at (p1);
\coordinate (c1) at (q1);

\coordinate (A1) at ($(x1)+(x4)$);
\coordinate (B1) at ($(A1)+(k)+(b1)$);
\coordinate (C1) at ($(B1)+(k)-(c1)$);
\draw [fill=black] (A1)--(B1)--(C1)--cycle;

\coordinate (b2) at (r1);
\coordinate (c2) at (c1);

\coordinate (A2) at (B1);
\coordinate (B2) at ($(A2)+(k)+(b2)$);
\coordinate (C2) at ($(B2)+(a1)-(c2)$);
\coordinate (D2) at (C1);
\draw [fill=black] (A2)--(B2)--(C2)--(D2)--cycle;

\coordinate (b3) at (b1);
\coordinate (c3) at (c1);

\coordinate (A3) at (B2);
\coordinate (B3) at ($(A3)+(k)+(b3)$);
\coordinate (C3) at ($(B3)+(a1)-(c2)$);
\coordinate (D3) at (C2);
\draw [fill=black] (A3)--(B3)--(C3)--(D3)--cycle;

\coordinate (b4) at (b1);
\coordinate (c4) at (s1);

\coordinate (A4) at (C2);
\coordinate (B4) at ($(A4)+(k)+(b4)$);
\coordinate (C4) at ($(B4)+(k)-(c4)$);
\coordinate (D4) at ($(C4)+(k)-(b4)$);
\draw [fill=black] (A4)--(B4)--(C4)--(D4)--cycle;

\coordinate (A5) at (D4);
\coordinate (B5) at ($(A5)+(k)+(b1)$);
\coordinate (C5) at ($(B5)+(k)-(c1)$);
\draw [fill=black] (A5)--(B5)--(C5)--cycle;

\coordinate (A6) at (C1);
\coordinate (B6) at ($(C1)+(k)-(s1)$);
\coordinate (C6) at (A5);
\draw [fill=black] (A6)--(B6)--(C6)--cycle;

%---------------------------------

\draw[white,opacity=1] (current bounding box.south west) rectangle 
        (current bounding box.north east);

\end{tikzpicture}
\end{document}

Ausgabe Bildbeschreibung hier eingeben

Antwort1

Vielleicht nicht der beste tikzStil, um damit umzugehen, aber es funktioniert auch ohne die fehlenden Bibliotheken aus Ihrem Beispiel.

\documentclass[tikz]{standalone} 

\newcommand{\tri}[1]{%
    \draw[#1] (0,0) -- (4,0) -- (4,4) -- cycle;
}

\begin{document}
\begin{tikzpicture}

\tri{fill=black}
\tri{fill=red,rotate=90}
\tri{fill=green,rotate=180}
\tri{fill=blue,rotate=270}

\end{tikzpicture}
\end{document}

Antwort2

Vielleicht können Sie die Verwendung in Betracht ziehen pics. Sie können sie verwenden, um eine komplexe Tikz-Figur zu definieren und wiederzuverwenden. Es ist möglich, sie mit Argumenten zu definieren oder sogar einige Eigenschaften zu ändern, wenn sie schließlich gezeichnet werden.

Der folgende Code zeigt zwei Beispiele mit Ihren Zahlen. mytriangledefiniert ein quadratisches Dreieck mit Ursprung in einem Scheitelpunkt mit drei Argumenten: Füllfarbe und Länge der beiden Seiten. Das zweite Beispiel definiert das „komplexe“ Bild.

\documentclass[tikz, border=2mm]{standalone} 
\usetikzlibrary{positioning}

\tikzset{
    pics/mytriangle/.style n args={3}{
        code={
            \fill[#1] (0,0)--++(0,#2)--++(#3,0)--cycle;
        }
    },
    myfigure/.pic={
        \fill[black] (0,0) rectangle ++(-1,-1);
        \fill[blue] (-1,0) rectangle ++(-3,-1);
        \fill[green] (-4,0)-- ++(-1,0)--++(1,-1)--cycle;
        \fill[blue] (0,-1) rectangle ++(-1,-3);
        \fill[green] (0,-4)-- ++(-1,0)--++(1,-1)--cycle;
        \fill[red] (-4,-1)-- ++(0,-3)--++(3,0)--cycle;
    }
}

\begin{document}
\begin{tikzpicture}
\foreach \a/\c in {0/red,90/green,180/blue,270/black}
    \pic[rotate=\a] at (0,0) {mytriangle={\c}{2}{2}};

\begin{scope}[xshift=4cm]
\foreach \a/\c in {0/red,90/green,180/blue,270/black}
    \pic[rotate=\a] at (0,0) {mytriangle={\c}{1}{1.8}};
\end{scope}

\begin{scope}[xshift=8cm]
\foreach \a/\c in {0/red,90/green,180/blue,270/black}
    \pic[rotate=\a] at (0,0) {mytriangle={\c}{1.5}{1}};
\end{scope}

\end{tikzpicture}

\begin{tikzpicture}
\foreach \a in {30,120,210,300}
    \pic[rotate=\a] at (\a:-1cm) {myfigure};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Antwort3

\documentclass[tikz]{standalone} 
\usetikzlibrary{positioning,calc}

\begin{document}
\begin{tikzpicture}


\coordinate (O) at (0,0);
\foreach \X/\Col in{1/red,2/green,3/black,4/blue}
{
\coordinate (x\X) at ({-90*\X}:4);
\draw[fill=\Col] (x\X) -- +({-90*(\X-1)}:4) -- (O) -- cycle;
}

%Gridline
\coordinate (G1) at ($(x1)+(x2)$);
\coordinate (G2) at ($(x3)+(x4)$);
\draw [step=0.5cm,draw=gray] (G1) grid (G2);
\draw[white,opacity=1] (current bounding box.south west) rectangle 
        (current bounding box.north east);
\end{tikzpicture}
\end{document}

verwandte Informationen