tikz Arithmetik mit Zahlen und Längen

tikz Arithmetik mit Zahlen und Längen

Betrachten Sie dieses Beispiel:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \def\starty{3}
  \def\length{1};
  \coordinate(a1) at (1, \starty);
  \coordinate(b1) at ($(a1) + (0, -\length)$);
  \coordinate(a2) at (2, \starty - \length);
  \coordinate(b2) at ($(a2) + (0, \length)$);
  \draw[red, ->](a1) -- (b1);
  \draw[red, ->](b2) -- (a2);
  \draw (0, 0) -- (3, 0);
  \draw (0, 0) -- (0, 3);
\end{tikzpicture}
\end{document}

Das Ergebnis sind 2 horizontal verschobene Pfeile, wie es sich bei einer einfachen arithmetischen Betrachtung ergeben sollte:

Bildbeschreibung hier eingeben

Wenn ich jedoch ersetze

  \def\length{1};

von

  \def\length{1cm};

Das Ergebnis ist unerwartet:

Bildbeschreibung hier eingeben

Was verursacht die Diskrepanz und wie kann ich dieses Beispiel beheben?

Antwort1

Das Problem besteht darin, dass Sie Ausdrücke mit und ohne Einheiten hinzufügen/kombinieren. TikZ unterscheidet zwischen Ausdrücken mit und ohne Einheiten. Ich empfehle die Lektürediese Antwort. Wenn Sie haben

 \path (x,y) coordinate (p);

mit xund ydimensionslos, dann pliegt der Punkt bei x*(x unit vector)+y*(y unit vector). Die Anfangswerte dieser Einheitsvektoren sind (1cm,0)bzw. (0,1cm), aber Sie können sie ändern, z. B. mit x=(1cm,0.2cm). (Diese Änderungen sind schwierig, wenn Sie keine Einheiten angeben, denn wenn man verwendet x={({cos(20)},{(sin(20)})},y={({cos(20+90)},{(sin(20+90)})}, erhält man nicht einfach ein gedrehtes Koordinatensystem. Vielmehr y=...wird beim Analysieren bereits das neu definierte verwendet x unit vector. Aus diesem Grund fügen Pakete wie tikz-3dplotEinheiten an, um die gedrehten Koordinatensysteme zu definieren.)

Wenn Sie haben

 \path (x,y) coordinate (p);

wobei xund yEinheiten tragen, dann pliegt der Punkt xbei rechts und yoben (Modulo-Transformationen wie Rotationen natürlich). Für die Anfangswerte der Einheitsvektoren

 \path (1,2) coordinate (p);

Und

 \path (1cm,2cm) coordinate (p);

führen zu den gleichen Ergebnissen, aber im Allgemeinen ist das nicht der Fall. Sie können auch eine Koordinate mit Einheiten und die andere ohne haben, z. B.

 \path (1cm,2) coordinate (p);

führt zu einem Punkt 1cmnach rechts, der um das Doppelte verschoben ist y unit vector.

Kommen wir nun zu Ihrer Frage, wenn Sie Ti präsentieren,kZ eine Mischung

 \path (a+b,y) coordinate (p);

wo aträgt Einheiten undb nicht, dann TikZ wird Einheiten anfügen pt. bSo zum Beispiel in

 \path (1cm+1,2) coordinate (p);

phat eine xKoordinate von 1cm+1pt, während in

 \path (1+1,2) coordinate (p);

Die Koordinate beträgt x2 mal x unit vector.

Um dies zu veranschaulichen, vergleiche ich die Koordinaten Ihres MWE mit denen, die ich ptan die dimensionslosen Ausdrücke angehängt habe, und zeige, dass sie übereinstimmen.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}

\subsection*{No units}

\begin{tikzpicture}
  \def\starty{3}
  \def\length{1};
  \coordinate(a1) at (1, \starty);
  \coordinate(b1) at ($(a1) + (0, -\length)$);
  \coordinate(a2) at (2, \starty - \length);
  \coordinate(b2) at ($(a2) + (0, \length)$);
  \draw[red, ->](a1) -- (b1);
  \draw[red, ->](b2) -- (a2);
  \draw (0, 0) -- (3, 0);
  \draw (0, 0) -- (0, 3);
\end{tikzpicture}

\subsection*{Mix of expressions with and without units}


\begin{tikzpicture}
  \def\starty{3}
  \def\length{1cm};
  \coordinate(a1) at (1, \starty);
  \coordinate(b1) at ($(a1) + (0, -\length)$);
  \coordinate(a2) at (2, \starty - \length);
  \coordinate(b2) at ($(a2) + (0, \length)$);
  \draw[red, ->](a1) -- (b1);
  \draw[red, ->](b2) -- (a2);
  \draw (0, 0) -- (3, 0);
  \draw (0, 0) -- (0, 3);
  \draw[<->,blue] (2,3pt-1cm) -- ++ (1,0) -- (2,3pt);
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen