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 \psrunit
beim Zeichnen \pscircle
.
\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}
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).