У меня есть старый код pstricks, который я переделываю с помощью TikZ. На моей текущей картинке шкалы x и y отличаются:
\begin{tikzpicture}[xscale=1.8,yscale=4]
Однако проблема в том, что круги рисуются как эллипсы, растянутые больше в направлении Y. Я также пробовал
\begin{tikzpicture}[x=1.8cm,y=4cm]
но это имеет тот же эффект растяжения кругов в эллипсы.
Так есть ли способ масштабировать только координаты в TikZ, не влияя на формы объектов?
решение1
Я нашел решение следующим образом
\draw (1,1) circle(0.1cm);
делает свою работу. Я использовал
\draw (1,1) circle(0.1);
который улавливает индивидуальные масштабирования.
решение2
PSTricks использует \psrunit
при рисовании \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}
Примечание: глобальное объявление радиальной единицы дает вам преимущество, поскольку вы можете изменить все единицы радиусов окружности в одном месте.
Мы также можем объявить новый ключ, чтобы облегчить доступ к этому радиальному блоку.
\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}
решение3
Основная идея всех предлагаемых решений заключается в замене единиц измерения x=
на и y=
. Это работает хорошо.
Однако в моем коде крайне желательно придерживаться xscale=
и yscale=
. Поэтому я создал очень простой макрос:
\newcommand{\pnt}[3][black]{%
\begin{scope}[shift={#2}];
\fill[color=#1,shift only] (0,0) circle(#3);
\end{scope}}
который используется с:
\pnt[red]{(3,4)}{0.06}
разместитькруговойкрасная точка радиусом 1,5 пункта в точке (3,4).