Anzeige:
Ergebnis 1 bis 3 von 3

Thema: TikZ und Umgang mit Einheiten?

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.02.2010
    Beiträge
    685

    TikZ und Umgang mit Einheiten?

    Derzeit scheine ich ein leichtes (?) Verständnisproblem mit TikZ zu haben.

    Code:
    \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.

  2. #2
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    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:

    Code:
    \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

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.02.2010
    Beiträge
    685
    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!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •