PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wiederkehrendes Muster mittels Schleife



Zig
21-10-2011, 19:40
Hallo zusammen!

Ich möchte gerne eine Grafik mit PSTricks erstellen. Da es sich um ein wiederkehrendes Muster (Sechseck) handelt, frage ich mich, ob man dies auch in einer Schleife automatisieren kann. Ich hab es schon mit \multido versucht, was allerdings nicht funktioniert hat. Und \forloop hatte bei mir erst gar keinen Effekt bzw. hat zu einer Fehlermeldung geführt. Vielleicht hab ich das aber auch alles nicht richtig angewandt.

Hier mal mein Code:



\documentclass{scrreprt}

\usepackage{pstricks,pst-pdf}

\begin{document}

\psset{xunit=0.866cm,yunit=1cm}
\begin{pspicture}(0,0)(17,16)

%einzelnes Sechseck
\psline[linewidth=1pt]{-}(1,0)(2,0.5)(2,1.5)(1,2)(0,1.5)(0,0.5)(1,0)

%die folgenden Sechsecke
\psline[linewidth=1pt]{-}(3,0)(4,0.5)(4,1.5)(3,2)(2,1.5)(2,0.5)(3,0)
\psline[linewidth=1pt]{-}(5,0)(6,0.5)(6,1.5)(5,2)(4,1.5)(4,0.5)(5,0)

\end{pspicture}

\end{document}



Jetzt wäre es schön, wenn ich die Koordinaten der folgenden Sechsecke nicht von Hand eingeben müsste.
Wäre nett, wenn jemand eine Idee hat, womit ich das umgesetzt bekomme.

Vielen Dank im Voraus :)

Gruß
Zig

mechanicus
21-10-2011, 21:01
\documentclass{scrreprt}

\usepackage{pstricks,multido}
\makeatletter
\define@boolkey[psset]{}[Pst@]{HRInnen}[true]{}
%\psset{HRInnen=false,unit=0.7}% unit nur wegen Buch
\def\psHexagon{\pst@object{psHexagon}}
\def\psHexagon@i{\@ifnextchar({\psHexagon@ii}{\psH exagon@ii(0,0)}}% MP angegeben?
\def\psHexagon@ii(#1)#2{%
\begin@ClosedObj% closed object
\pst@@getcoor{#1}% hole Mittelpunkt
\pssetlength\pst@dimc{#2}% setze Radius auf pt
\addto@pscode{% PostScript
\pst@coor T % xM yM neuer Ursprung
\psk@dimen CLW mul % Liniendicke setzen
/Radius \pst@number\pst@dimc\space % Radius speichern
\ifPst@HRInnen\space 3 sqrt 2 div div \fi def % innen?
/angle \ifPst@HRInnen 30 \else 0 \fi def % Anfangswinkel
Radius angle PtoC moveto % gehe zum ersten Punkt
6 {/angle angle 60 add def % alpha := alpha+60
Radius angle PtoC L % Linie zum naechsten Punkt
} repeat % Wiederhole
closepath }% closed object / end pscode
\def\pst@linetype{3}% Linientyp festlegen
\showpointsfalse% keine Stuetzpunkte zeigen
\end@ClosedObj\ignorespaces}% Spaces schlucken
\makeatother
\begin{document}

\psset{xunit=1cm,yunit=1cm,HRInnen=true}
\begin{pspicture}(0,0)(17,16)
\multido{\iA=1+2}{4}{%
\rput(\iA,1){\psHexagon[linecolor=red,]{1}}}
\end{pspicture}

\end{document}

Marco