PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TikZ und Umgang mit Einheiten?



LuPi
22-11-2013, 13:22
Derzeit scheine ich ein leichtes (?) Verständnisproblem mit TikZ zu haben.


\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\newlength{\mylength}\setlength{\mylength}{2cm}
\begin{tikzpicture} % A
\fill
(0.74*\mylength,0) -- ++(-0.37*\mylength,-0.37*\mylength) -- ++(1.05*\mylength,0) --
++(-0.481*\mylength,0) -- ++(-0.259*\mylength,0.259*\mylength) -- ++(-1.05*\mylength,0) -- cycle;
\end{tikzpicture}

\begin{tikzpicture}
\fill
(0.74\mylength,0) -- ++(-0.37\mylength,-0.37\mylength) -- ++(1.05\mylength,0) --
++(-0.481\mylength,0) -- ++(-0.259\mylength,0.259\mylength) -- ++(-1.05\mylength,0) -- cycle;
\end{tikzpicture}

\begin{tikzpicture}
\fill[scale=2]
(0.74,0) -- ++(-0.37,-0.37) -- ++(1.05,0) --
++(-0.481,0) -- ++(-0.259,0.259) -- ++(-1.05,0) -- cycle;
\end{tikzpicture}

\makeatletter
\begin{tikzpicture}
\fill[scale=\strip@pt\mylength]
(0.74,0) -- ++(-0.37,-0.37) -- ++(1.05,0) --
++(-0.481,0) -- ++(-0.259,0.259) -- ++(-1.05,0) -- cycle;
\end{tikzpicture}
\makeatother

\begin{tikzpicture} % E
\fill[scale=\mylength]
(0.74,0) -- ++(-0.37,-0.37) -- ++(1.05,0) --
++(-0.481,0) -- ++(-0.259,0.259) -- ++(-1.05,0) -- cycle;
\end{tikzpicture}
\end{document}


Dieses Beispiel verhält sich in meinen Augen widersprüchlich. Das liegt
sicherlich daran, dass mir der Umgang mit den (Längen-)Einheiten nicht
klar ist. Vielleicht könnt Ihr mir auf die Sprünge helfen?

Das Ziel ist letztlich, dass ich mit Ansatz A und Ansatz E dasselbe
Ergebnis bekomme.

esdd
22-11-2013, 14:18
Die Länge wird intern mit der Einheit pt abgespeichert.

tikz akzeptiert als Koordinatenangaben zum einen Längen (also mit Einheiten) als auch Zahlenwerte ohne Einheit. Letztere werden dann mit den Einheiten des Koordinatensystems multipliziert (default ist jeweils 1cm). Diese Einheiten kannst du als Optionen vorgeben.

scale erwartet dagegen einen Zahlenwert, den du natürlich aus \mylength ausrechnen lassen kannst:


\documentclass{scrartcl}
\usepackage{tikz}
\newlength{\mylength}\setlength{\mylength}{2cm}

\begin{document}

\verb|\mylength|= \the\mylength

\begin{tikzpicture} % A
\fill
(0.74*\mylength,0) -- ++(-0.37*\mylength,-0.37*\mylength) -- ++(1.05*\mylength,0) --
++(-0.481*\mylength,0) -- ++(-0.259*\mylength,0.259*\mylength) -- ++(-1.05*\mylength,0) -- cycle;
\end{tikzpicture}

% Änderung der Einheiten:
\begin{tikzpicture} % E
\fill[x=\mylength,y=\mylength]
(0.74,0) -- ++(-0.37,-0.37) -- ++(1.05,0) --
++(-0.481,0) -- ++(-0.259,0.259) -- ++(-1.05,0) -- cycle;
\end{tikzpicture}

% Berechnung des Skalierungsfaktors:
\begin{tikzpicture} % E
\pgfmathsetmacro\scale{\the\mylength/1cm}
\fill[scale=\scale]
(0.74,0) -- ++(-0.37,-0.37) -- ++(1.05,0) --
++(-0.481,0) -- ++(-0.259,0.259) -- ++(-1.05,0) -- cycle;
\end{tikzpicture}

\end{document}

Gruß
Elke

LuPi
22-11-2013, 14:36
Vielen Dank für die Erläuterung, ich werde mit diesem Thema noch ein
wenig spielen ...

Was mich ein wenig irritiert dabei, ist die Tatsache, dass trotz "falscher"
Beschickung des einheitenlosen Parameters scale mit einer Länge keine
Fehlermeldung erscheint. Fehlertolerante Systeme sind zwar wünschenswert,
aber das geht meiner Meinung nach an dieser Stelle zu weit. Oder bringe ich
da schon wieder etwas durchaneinder?

Schönes Wochenende!