# Tikz: Scale coordinates perhaps using the calc package

I've drawn a rectangle like this:

\draw[color=orange, fill=orange, opacity=0.1] (Q3term1) rectangle (Q3term2);

and essentially, what I want is to do is stretch the rectangle by 10% horizontally and stretch is vertically by 5%, so something like:

\draw[color=orange, fill=orange, opacity=0.1] ($(1.1,1.05)*(Q3term1)$) rectangle ($(0.9,0.95)*(Q3term1)$);

If there is a way to do it without the calc library, that'd be good too.

Thanks.

• Do you want to scale the rectangle about that amount or the coordinates? Commented Aug 30, 2013 at 3:22
• Wow, yes that's exactly what I want... I can't believe how much I failed at finding this... Thanks. Oh whoops, you change your answer! Well whyat you had was what I wanted. I guess I want to scale the rectangle. Commented Aug 30, 2013 at 3:28
• Yes, I only took a look at your second code line and that can be done without the calc library with xscale and yscale but that does scale the coordinate, not the rectangle. The 0,0 coordinate would also be un-affected by this. There is scale around which you could use to scale around ($(Q3term1)!.5!(Q3term2)$) but this works only for the same scale in both directions. Maybe it can be easier done with a node like in tikz: Can we set the corner coordinates of a rectangle? Commented Aug 30, 2013 at 3:31

If you don’t need to specify the corners of the rectangle relatively, you can use a rectangle node for this.

The \pgfpointlineattime{<factor>}{<p1>}{<p2>} macro is the low-level PGF version of ($(<p1>)!<factor>!(<p2>)$) which is also used in the placement of nodes along a straight line with the pos=<factor> option.

If you want to add a specific padding length, you can use the fit library with inner xsep and inner ysep.

The backgrounds library is only used to add a simply grid to the picture.

## Code

\documentclass[tikz]{standalone}
\usetikzlibrary{calc,backgrounds,fit}
\makeatletter
\tikzset{
from/.code args={#1 to #2}{%
\pgfextract@process\tikz@fromto@first{\tikz@scan@one@point\pgfutil@firstofone#1\relax}%
\pgfextract@process\tikz@fromto@second{\tikz@scan@one@point\pgfutil@firstofone#2\relax}%
% The next line sets "at".
\pgfextract@process\tikz@node@at
{\pgfpointlineattime{.5}{\tikz@fromto@first}{\tikz@fromto@second}}%
\pgfpointdiff{\tikz@fromto@first}{\tikz@fromto@second}%
\tikzset{
shape=rectangle,
anchor=center,
inner sep=+0pt,
outer sep=+0pt,
minimum width/.expanded={abs(\the\pgf@x)},
minimum height/.expanded={abs(\the\pgf@y)}}%
}
}
\makeatother
\begin{document}
\begin{tikzpicture}[gridded,nodes={orange, draw, fill, fill opacity=.5}]
\path (1,1) coordinate (a)
(3,4) coordinate (b)
(4,1) coordinate (a')
(6,4) coordinate (b');

\node[from=(a) to (b), xscale=1.1, yscale=1.05] {};
\node[fit=(a')(b'), inner xsep=.1cm, inner ysep=.07cm] {};
\end{tikzpicture}
\end{document}