TikZ: verschiedene x- und y-Skalen, aber so, dass die Formen ihr Aussehen beibehalten

TikZ: verschiedene x- und y-Skalen, aber so, dass die Formen ihr Aussehen beibehalten

Ich habe alten pstricks-Code, den ich mit TikZ neu mache. In meinem aktuellen Bild sind die x- und y-Skalen unterschiedlich:

\begin{tikzpicture}[xscale=1.8,yscale=4]

Dies hat jedoch das Problem, dass Kreise als Ellipsen gezeichnet werden und stärker in die y-Richtung gestreckt werden. Ich habe auch versucht

\begin{tikzpicture}[x=1.8cm,y=4cm]

Dies hat jedoch den gleichen Effekt wie das Strecken von Kreisen zu Ellipsen.

Gibt es also eine Möglichkeit, Koordinaten nur in TikZ zu skalieren, ohne die Objektformen zu beeinflussen?

Antwort1

Ich habe die Lösung wie folgt gefunden

\draw (1,1) circle(0.1cm);

funktioniert. Ich habe verwendet

\draw (1,1) circle(0.1);

welches die einzelnen Skalierungen aufnimmt.

Antwort2

PSTricks verwendet \psrunitbeim Zeichnen \pscircle.

Bildbeschreibung hier eingeben

\documentclass[tikz,border=12pt]{standalone}

\newlength\runit
\runit=1cm

\edef\Radius#1{#1\runit}

\begin{document}
\begin{tikzpicture}[x=3cm,y=2cm]
    \draw[fill=red] (0,0) circle (\Radius{2});
    \draw (-2,-2) rectangle (2,2);
\end{tikzpicture}
\end{document}

Hinweis: Das globale Deklarieren der Radialeinheit bietet Ihnen den Vorteil, dass Sie alle Einheiten der Kreisradien an einer Stelle ändern können.


Wir können auch einen neuen Schlüssel deklarieren, damit wir einfacher auf diese radiale Einheit zugreifen können.

\documentclass[tikz,border=12pt]{standalone}

\makeatletter
\newlength\tikz@runit
\tikzset{
    r/.code=\pgfmathsetlength\tikz@runit{#1},
    r=+1cm, % setting a default value
    r radius/.style={radius={(#1)*\tikz@runit}},
    xr radius/.style={x radius={(#1)*\tikz@runit}},
    yr radius/.style={y radius={(#1)*\tikz@runit}}
}
\makeatother

\begin{document}
\begin{tikzpicture}[x=3cm,y=2cm]
    \fill[fill=red] (0,0) circle [r radius=1+1];
    \fill[fill=green] (-1,1) circle [xr radius=1+3/4, yr radius=1-1/3]
                      (1,1)  circle [xr radius=1+3/4, yr radius=1-1/3];
    \draw (-2,-2) rectangle (2,2);
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort3

Die Kernidee aller vorgeschlagenen Lösungen beruht auf dem Ändern der Einheiten x=mit und y=. Das funktioniert gut.

In meinem Code ist es jedoch sehr wünschenswert, bei xscale=und zu bleiben yscale=. Daher habe ich ein sehr einfaches Makro eingerichtet:

\newcommand{\pnt}[3][black]{%
\begin{scope}[shift={#2}];
\fill[color=#1,shift only] (0,0) circle(#3);
\end{scope}}

welches verwendet wird mit:

\pnt[red]{(3,4)}{0.06}

einen Platzkreisförmigroter Punkt mit 1,5pt Radius an der Stelle (3,4).

verwandte Informationen